문제📖
![](https://velog.velcdn.com/images%2Fcosmos%2Fpost%2Fec36c8d0-ba98-42ed-840f-f5cb5894138e%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-03-20%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%207.10.00.png)
풀이🙏
- 첫째 줄에 1보다 크거나 같고, 10^6보다 작거나 같은 정수 N이 주어진다.
- 연산은 다음과 같이 세 가지로 나뉜다.
-> 1. 3으로 나누어 떨어지면, 3으로 나눈다.
-> 2. 2로 나누어 떨어지면, 2로 나눈다.
-> 1을 뺀다.
- 첫째 줄에 연산을 하는 횟수의 최솟값을 출력한다.
- 시간 제한 0.15초, 메모리 제한 128MB
-> DP 알고리즘 문제이다.
-> 작은거부터 큰 문제를 해결하는 오름차순 방식으로 해결해야지 시간안에 해결할 수 있다.
-> DP 문제는 배열로 나눠서 문제를 나누어서 푸는게 수월하고좋다.
코드💻
import sys
def DP(N):
for i in range(2, N+1):
d[i] = d[i-1] + 1
if all((i%2==0, d[i] > d[i//2] + 1)):
d[i] = d[i//2] + 1
if all((i%3==0, d[i] > d[i//3] + 1)):
d[i] = d[i//3] + 1
return d[N]
N = int(sys.stdin.readline())
d = [0] * (N + 1)
print(DP(N))
결과😎
![](https://velog.velcdn.com/images%2Fcosmos%2Fpost%2F12df0ec1-5a62-4611-87d9-ffb988336a7f%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-03-22%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2010.50.42.png)
출처 && 깃허브📝
https://www.acmicpc.net/problem/1463
github