https://www.acmicpc.net/problem/1463
시간 0.5초, 메모리 128MB
input :
output :
조건 :
최대 입력 되는 숫자는 1,000,000 1로 빼기만 해도 1백만 밖에 안 걸림..
재귀 함수로 구현하려 했는데.. 3 경우 모두 계산 해 줘야 하는데도 리턴에 걸려서 함수 밖으로 나가는 경우 발생.
dp 리스트 전체를 다 계산 해 놓고 인덱스로 아이템을 가져오자.
정답 코드 :
import sys
n = int(sys.stdin.readline())
dp = [0] * (n + 1)
for i in range(1, n + 1):
if i == 1:
dp[1] = 0
continue
dp[i] = dp[i - 1] + 1
if i % 3 == 0 :
dp[i] = min(dp[i], dp[i // 3] + 1)
if i % 2 == 0 :
dp[i] = min(dp[i], dp[i // 2] + 1)
print(dp[n])
점화식 만들기 부터 하고.
리스트를 다 채울지. 필요한 부분만 위에서 부터 재귀로 부를지. 생각해보자