숫자변환하기

Lee1231234·2023년 2월 25일

코딩테스트

목록 보기
29/95

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

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

맨처음에 BFS로 풀려고 했다가 시간초과로 DFS로 푼 문제
생각해보면 count의 값이 커지기만하지 작아질 이유가 없었다.
중간에 에러가 한번 났으나 boolean의 크기를 제한보다 작게 지정해서 생긴 일이었다.
코드

import java.util.*;
class Solution {
    
    
    public int solution(int x, int y, int n) {
        if(x==y){
            return 0;
        }
        Queue<Integer> queue = new LinkedList<>();
        boolean[] bool = new boolean[100000000];
        queue.add(x);
        int count =0;
        while(!queue.isEmpty()){
            int size =queue.size();
            for(int i=0;i<size;i++){
                int next=queue.poll();
                if(next==y) return count;               
                calcul(next+n,bool,queue,y);
                calcul(next*2,bool,queue,y);
                calcul(next*3,bool,queue,y);
            }

            count++;
        }
      
    
        return -1;
    }
    public void calcul(int next,boolean[] bool,Queue<Integer> queue,int y){
        if(next<=y&&bool[next]==false){
            bool[next]=true;
            queue.add(next);
        } 
            
                
    }
   
}
profile
not null

0개의 댓글