알고리즘

[Lv_2] 숫자 변환하기

빅디 2023. 8. 23. 23:03
728x90

문제링크: https://school.programmers.co.kr/learn/courses/30/lessons/154538

import java.util.*;

class Solution {
    public int solution(int x, int y, int n) {
    	// set으로 선언해서 같은 값들이 중복생성 되는 것 방지 -> 경우의 수 낮추기
        HashSet<Integer> set = new HashSet<>();
        
        // 초기값 대입
        set.add(x + n);
        set.add(x * 2);
        set.add(x * 3);
        
        int count = 1;
        
        // x와 y가 같은 경우는 count = 0
        if (x == y) {
            return 0;
        }
        
        while (set.size() > 0) {            
            if (set.contains(y)) {
                return count;
            }
            
            HashSet<Integer> newSet = new HashSet<>();
            
            for (int i : set) {
                if (i + n <= y) {
                    newSet.add(i + n);
                }

                if (i * 2 <= y) {
                    newSet.add(i * 2);
                }

                if (i * 3 <= y) {
                    newSet.add(i * 3);
                }
            }
            
            // 기존 set은 버리고 새로운 set 값으로 대체
            set = newSet;
            count++;
        }
        
        return -1;
    }
}