
1. 문제 분석
1) 3가지 연산을 사용하여 정수 N을 1로 반드는 최소한의 연산 횟수를 구한다.
2. 제약 조건
1) 1 <= N <= 10^6
3. 최초 의사결정
1) 1 = 0번
2 = 1번 2^1
3 = 1번 3^1
4 = 2번 2^2
5 = 3번 2^2 + 1^1 5 -> 4 -> 2 -> 1
6 = 2번 3^1 + 2^1 6 -> 2 -> 1
7 = 2번 1 + 3^1 + 2^1
8 = 3번
9 = 3번
10 = 3번 10 -> 5 -> 4 -> 2 -> 1, 10 -> 9 -> 3 -> 1
while 돌리면서 3의 배수면 /3, 2의 배수면 /2, 그렇지 않으면 -1을 반복한다.
4. 문제풀면서 수정한 부분
1) Math.min을 사용하는 방법까지는 맞았다! 생각한 풀이를 구현하는 연습을 더 해야 할 것 같다..
2) while문을 사용하면 큰 숫자부터 처리하기 때문에 /2, /3의 경우가 아직 저장되지 않았을 수 있다.
for문을 사용해서 작은 수부터 채워나가야 안전하다.
3) dp[i]을 구할 때 +1을 해야 연산횟수가 하나 증가된 값이 저장된다.
4) 2와 3으로 동시에 나누어 떨어질 경우에도 최소값이 보장된다.

| 25206. 너의 평점은 (0) | 2025.03.09 |
|---|---|
| 1244. 스위치 켜고 끄기 (0) | 2025.03.08 |
| [다른 방법으로 풀기] 2776. 암기왕 (0) | 2025.02.24 |
| 15649. N과 M(1) (0) | 2025.02.23 |
| 25178. 두라무리 휴지 (0) | 2025.02.23 |