백준 1463. 1로 만들기 (파이썬)
import sys
X = int(sys.stdin.readline())
L = [0] * (X + 1)
for i in range(2, X + 1):
if i % 2 == 0 and i % 3 == 0:
L[i] = min(L[i - 1] + 1, L[i // 2] + 1, L[i // 3] + 1)
elif i % 2 == 0:
L[i] = min(L[i - 1] + 1, L[i // 2] + 1)
elif i % 3 == 0:
L[i] = min(L[i - 1] + 1, L[i // 3] + 1)
else:
L[i] = L[i - 1] + 1
print(L[X])
1부터 시작해서 정해진 수까지 최단 거리로 올라간다는 느낌
2로 나누는 경우와 3으로 나누는 경우 중에서도 최소값을 찾는 게 중요했다
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ] 10989 수 정렬하기 3 (python) (0) | 2022.10.03 |
---|---|
[BOJ] 11652 카드 (python) (0) | 2022.10.01 |
[BOJ] 10026 적록색약 (python) (0) | 2022.08.24 |
[BOJ] 3986 좋은 단어 (python) (0) | 2022.08.07 |
[BOJ] 9012 괄호 (python) (0) | 2022.07.23 |