Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

코딩응급실

프로그래머스: 숫자 변환 본문

Java

프로그래머스: 숫자 변환

Daeryuk Kim 2024. 3. 26. 22:34
import java.util.*;

class Solution {
    public int solution(int x, int y, int n) {
        // 방문한 상태를 저장하는 배열, x가 1,000,000까지 가능하므로 그에 맞게 배열 크기 설정
        boolean[] visited = new boolean[1000001];
        // BFS를 위한 큐, 배열을 사용하여 현재 값과 연산 횟수를 저장
        Queue<int[]> queue = new LinkedList<>();
        // 시작점 추가
        queue.add(new int[]{x, 0});
        
        while (!queue.isEmpty()) {
            int[] current = queue.poll();
            int currentValue = current[0];
            int count = current[1];
            
            // 목표값에 도달한 경우 현재까지의 연산 횟수 반환
            if (currentValue == y) {
                return count;
            }
            
            // 방문한 적이 없는 상태만 탐색
            if (currentValue <= y && !visited[currentValue]) {
                visited[currentValue] = true;
                
                // 가능한 연산 3가지를 큐에 추가
                queue.add(new int[]{currentValue + n, count + 1});
                if (currentValue * 2 <= y) {
                    queue.add(new int[]{currentValue * 2, count + 1});
                }
                if (currentValue * 3 <= y) {
                    queue.add(new int[]{currentValue * 3, count + 1});
                }
            }
        }
        
        // y로 만들 수 없는 경우
        return -1;
    }
    public static void main(String[] args) {
        Solution sol = new Solution();
        int x = 10;
        int y = 40;
        int n = 5;
        int result = sol.solution(x,y,n);
        System.out.println(result); 
    }
}