https://www.acmicpc.net/problem/1463
다이나믹 프로그래밍으로 해결한다.
n을 1로 만들기 위한 최소값은 n/3, n/2, n-1 을 1로 만들기 위한 최소값들 중에 최소값에다가 1을 더한 값이다.
다이나믹 프로그래밍을 하지 않으면 실패하는 테스트 케이스들
입력
80
출력
6
입력
25
출력
5
import sys
input = sys.stdin.readline
n = int(input())
cnt = {1:0}
for i in range(2, n+1):
if i % 3 == 0:
cnt[i] = cnt[i//3] + 1
if i % 2 == 0:
if i in cnt:
cnt[i] = min(cnt[i], cnt[i//2] + 1)
else:
cnt[i] = cnt[i//2] + 1
if i in cnt:
cnt[i] = min(cnt[i], cnt[i-1] + 1)
else:
cnt[i] = cnt[i-1]+1
print(cnt[n])