문제 주소: https://www.acmicpc.net/problem/1463
난이도: silver 3
'''2로도 나눠지고 3으로도 나누어 떨어지지 않는 경우'''
cache[i] = min(cache[i-1], cache[i//3], cache[i//2]) + 1
'''2로만 나눠지고 3으로는 나누어 떨어지지 않는 경우'''
cache[i] = min(cache[i-1], cache[i//2]) + 1
'''3으로만 나눠지고 2로는 나누어 떨어지지 않는 경우'''
cache[i] = min(cache[i-1], cache[i//3]) + 1
'''그 외'''
cache[i] = cache[i-1] + 1
점화식을 점화시키기 전에 입력이 초기화된 값으로 답변될수 있을 경우와 아닌 경우를 나눠야함.
n = int(input())
cache = [1e9] * (n+1)
cache[1] = 0 #1일 때
if n > 1:
cache[2] = 1 #2일 때
if n > 2:
cache[3] = 1 #3일 때
if n in [1,2,3]:
print(cache[n])
exit(0)
else:
for i in range(4,n+1):
if i%3 == 0 and i%2 == 0:
cache[i] = min(cache[i-1], cache[i//3], cache[i//2]) + 1
elif i%2 == 0 and i%3 != 0:
cache[i] = min(cache[i-1], cache[i//2]) + 1
elif i%2 != 0 and i%3 == 0:
cache[i] = min(cache[i-1], cache[i//3]) + 1
else:
cache[i] = cache[i-1] + 1
print(cache[n])