본문 바로가기
Beakjoon&프로그래머스/Java

[백준/Java] 1463번 1로 만들기

by 현장 2026. 1. 7.

-Code

import java.util.Scanner;

public class BOJ1463 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int n  = sc.nextInt();

        int[] dp = new int[n + 1];

        for (int i = 2; i <= n; i++) {
            dp[i] = dp[i - 1] + 1;

            if (i % 2 == 0) {
                dp[i] = Math.min(dp[i / 2] + 1, dp[i]);
            }

            if (i % 3 == 0) {
                dp[i] = Math.min(dp[i / 3] + 1, dp[i]);
            }
        }
        System.out.println(dp[n]);
    }
}

직접 값을 몇개 넣어보니 다음과 같았습니다.

- 1 ▶️ 1 
- 2 ▶️ 1
- 3 ▶️ 1 
- 3 ▶️ 2 
- 5 ▶️ 3 
- 6 ▶️ 2 
- 7 ▶️ 3 
- 8 ▶️ 3 
- 9 ▶️ 2 
-10 ▶️ 3

그래서 inde에 2와 3으로 뭔가 나눠야한다는 생각은 했지만 로직을 이상하게 짰습니다. 그래서 뭐가 잘못된지 보니 이전 값의 +1한 값과 또 비교를 해줘야 했고 else if로 감싸면 안되었습니다. 이부분을 알게되어 해결했습니다.