알고리즘

[프로그래머스] - 숫자 변환하기 JAVA 풀이

sppl24 2024. 10. 8. 01:13
반응형

프로그래머스 - 숫자 변환하기 JAVA 풀이

문제 설명

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

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

제한사항

  • 1 ≤ xy ≤ 1,000,000
  • 1 ≤ n < y

입출력 예

입출력 예


아이디어

  • 브루트포스로는 시간초과
  • bfs로 해결이 가능하지만 dp가 가장 적절한 해법인듯 하다
  • 각 계산식 경우의 수 마다 비교해가면서 dp 배열 만들고 변환 불가처리만 주의하자

JAVA 풀이

class Solution {
    public int solution(int x, int y, int n) {
        int[] dp = new int[y + 1];
        for (int i = x; i < y + 1; i++) {
            if (i != x && dp[i] == 0) {
                dp[i] = -1;
                continue;
            }
            if (i * 2 <= y) {
                if (dp[i * 2] == 0) {
                    dp[i * 2] = dp[i] + 1;
                } else {
                    dp[i * 2] = Math.min(dp[i] + 1, dp[i * 2]);
                }
            }
            if (i * 3 <= y) {
                if (dp[i * 3] == 0) {
                    dp[i * 3] = dp[i] + 1;
                } else {
                    dp[i * 3] = Math.min(dp[i] + 1, dp[i * 3]);
                }
            }
            if (i + n <= y) {
                if (dp[i + n] == 0) {
                    dp[i + n] = dp[i] + 1;
                } else {
                    dp[i + n] = Math.min(dp[i] + 1, dp[i + n]);
                }
            }
        }
        return dp[y];
    }

}
반응형