다이나믹 프로그래밍의 기본 문제다.
핵심은 "한번만 연산" 한다는 것이다. 탐색이나 bf 로도 풀 수 있겠지만 문제 특성상 반복되는 부분이 많고
이러한 반복되는 부분을 중복 계산 하지 않기 위해서 다이나믹 프로그래밍을 한다.
cnt리스트에 100000을 붙인 이유는 나누기3 나누기2 마이너스1 중에서 해당사항이 없는 요소는
min에 값이 포함시키지 않기 위해서이다.
너무 오랜만에 파이썬으로 풀어서 문법이 헷갈릴 정도였다. 시험도 끝났으니 앞으로 매일 1~2문제씩은
꾸준히 열심히 푸는것을 목표로 해야겠다.
num = int(input())
cnt = [100000] + [0 for i in range(num)]
for i in range(2,num+1):
div3 = 0
div2 = 0
if i % 3 == 0:
div3 = int(i / 3)
if i % 2 == 0:
div2 = int(i / 2)
minus = i-1
answer = min(cnt[div3],cnt[div2],cnt[i-1]) + 1
cnt[i] = answer
print(cnt[-1])
'Data Science > 알고리즘 공부' 카테고리의 다른 글
[파이썬][알고리즘] 11727 2Xn 타일링 2 (0) | 2020.07.21 |
---|---|
[백준][파이썬] 11726 2Xn 타일링 (0) | 2020.07.21 |
[백준][파이썬] 2206 벽 부수고 이동하기 - 메모리초과 (0) | 2020.04.13 |
[백준][파이썬] 16768 Mooyo Mooyo (0) | 2020.04.08 |
[백준][파이썬] 3055번 탈출 -BFS (0) | 2020.04.07 |
댓글