백준
백준 1463 1로 만들기 (파이썬)
MC류짱
2023. 1. 16. 21:31
풀이
def solve():
dp = [0] * (N+1)
for i in range(2, N+1):
dp[i] = dp[i-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[N])
if __name__ == '__main__':
N = int(input())
solve()
해설
- dp의 인덱스는 그 인덱스 수의 최소 연산을 가지고 있음
- 인덱스 1의 값은 당연히 0이고 2는 1임 (+1 또는 2로 나누기)
- 3가지 경우의 수 중에 가장 적은 연산을 타고올라감