문제풀이/백준(Boj) 문제풀이

[백준] - 1463. 1로 만들기(python) / bottom up 방식

얄루몬 2023. 6. 7. 16:33

[오답]

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])