1로 만들기

last update: 2021.09.08.WED

1463 1로 만들기, Silver 3

Memory 115244KB, Time 800ms


  • 메모리 및 시간 면에서 개선이 필요하다.
from collections import defaultdict

n = int(input())
memo = defaultdict(int)

def division(n):
    memo[1] = 0
    memo[2] = 1
    memo[3] = 1
    for i in range(4, n+1):
        if i not in memo:
            if i % 3 == 0 and i % 2 !=0:
                memo[i] = min(memo[i//3], memo[i-1]) + 1
            elif i % 3 == 0 and i % 2 == 0:
                memo[i] = min(memo[i//3], memo[i//2], memo[i-1]) + 1
            elif i % 3 != 0 and i % 2 == 0:
                memo[i] = min(memo[i//2], memo[i-1]) + 1
            else:
                memo[i] = memo[i-1]+1
    return memo[n]

print(division(n))