https://www.acmicpc.net/problem/1463
(23.5.4 추가)
DP 를 통해서 풀기
n은 1 이상의 수이다.
1일 때는 연산의 최소 횟수는 0이다.
dp[1] = 0
(반복문)
(10 같은 경우는 10 -> 5 -> 4 -> 2 -> 1 보다 10 -> 9 -> 3 -> 1 이 더 빠르기 때문)
x = int(input())
dp = [0 for i in range(x+1)]
for i in range(2, x+1):
dp[i] = dp[i-1] + 1 # 1 빼는 연산
if i % 2 == 0:
dp[i] = min(dp[i], dp[i//2]+1)
if i % 3 == 0:
dp[i] = min(dp[i], dp[i//3]+1)
print(dp[x])
DP 문제가 아직 너무 어렵다..
dp 에는 값이 아니라 연산 횟수를 저장하는 것이다
반례가 나올 수 있으므로 1을 빼는 연산을 가장 먼저 진행한다