[오답]
n = int(input())
dp = [0] * (n + 1)
#base case
dp[1] = 0
dp[2] = dp[3] = 0
for i in range(4, n+1):
if i % 6 == 0:
dp[i] = min(dp[i//2], dp[i//3])+1
elif i % 2 == 0:
dp[i] = min(dp[i//2], dp[i-1])+1
elif i % 3== 0:
dp[i] = min(dp[i//3], dp[i-1])+1
else:
dp[i] = dp[i-1]+1
print(dp[n])
- base case가 잘못된 경우로 n이 1일 때, 2나 3에 접근할 수 없어서 indexError를 뱉어내게 된다.
- 이 문제의 경우 풀리지 않아서 내가 작성한 정답을 백준 질문하기에 올려두고 다른 분들에게 왜 이런지 여쭤봤는데 접근 인덱스가 n이 1일때를 고려하지 않아서 발생했다고 했다.
- 제약 조건을 잘 보자
[정답]
n = int(input())
dp = [0] * (n + 1)
#base case
dp[1] = 0
for i in range(2, n+1):
if i % 6 == 0:
dp[i] = min(dp[i//2], dp[i//3])+1
elif i % 2 == 0:
dp[i] = min(dp[i//2], dp[i-1])+1
elif i % 3== 0:
dp[i] = min(dp[i//3], dp[i-1])+1
else:
dp[i] = dp[i-1]+1
print(dp[n])