숫자 변환하기 도움말

숫자 변환하기 도움말

자연수 x를 y로 변환하려고 합니다. 사용할 수 있는 연산은 다음과 같습니다.

  • x에 n을 더합니다
  • x에 2를 곱합니다.
  • x에 3을 곱합니다.

자연수 xyn이 매개변수로 주어질 때, x를 y로 변환하기 위해 필요한 최소 연산 횟수를 return하도록 solution 함수를 완성해주세요. 이때 x를 y로 만들 수 없다면 -1을 return 해주세요.

https://school.programmers.co.kr/learn/courses/30/lessons/154538


import java.util.*;

public class Main21 {
    public static void main(String[] args) {

        int x = 2;
        int y = 5;
        int z = 4;

        var reuslt = solution(x, y, z);

        System.out.println(reuslt);
    }

    public static int solution(int x, int y, int n) {

        Queue<Integer> queue1 = new LinkedList<>();
        Queue<Integer> queue2 = new LinkedList<>();

        queue1.add(y);

        int tryCount = 0;

        while (true) {
            var targetQueue = queue1.isEmpty() ? queue2 : queue1;
            var otherQueue = !queue1.isEmpty() ? queue2 : queue1;

            if (targetQueue.contains(x)) {
                return tryCount;
            }

            if (targetQueue.isEmpty()) {
                return -1;
            }

            if (Collections.max(targetQueue) < x) {
                return -1;
            }


            while (!targetQueue.isEmpty()) {
                var temp = targetQueue.poll();
                if (temp < x) {
                    continue;
                }

                if (temp % 2 == 0 && temp / 2 >= x) {
                    otherQueue.add(temp / 2);
                }

                if (temp % 3 == 0 && temp / 3 >= x) {
                    otherQueue.add(temp / 3);
                }

                if (temp - n >= x) {
                    otherQueue.add(temp - n);
                }

            }

            tryCount++;
        }
    }
}