풀이

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가지 경우의 수 중에 가장 적은 연산을 타고올라감

'백준' 카테고리의 다른 글

백준 1063 킹 (파이썬)  (0) 2023.05.15
백준 14716 현수막 (자바)  (0) 2023.01.16
백준 1074 Z (파이썬)  (0) 2022.12.25
백준 1920 수 찾기 (자바, 파이썬)  (0) 2022.12.21
백준 1926 그림 (파이썬, 자바)  (0) 2022.12.18
복사했습니다!