728x90
1) X가 5로 나누어 떨어지면, 5로 나눔
2) X가 3으로 나누어 떨어지면, 3으로 나눔
3) X가 2로 나누어 떨어지면, 2로 나눔
4) X에서 1을 뺌
- 4가지 연산을 사용해서 1로 만듦
- 최소 연산 횟수 출력
x = int(input())
# DP 테이블 초기화
d = [0] * 1000001
# 다이나믹 프로그래밍 (보텀업)
for i in range(2, x + 1):
# 현재의 수에서 1을 빼는 경우
d[i] = d[i - 1] + 1
# 현재의 수가 2로 나누어 떨어지는 경우
if i % 2 == 0:
d[i] = min(d[i], d[i // 2] + 1)
# 현재의 수가 3으로 나누어 떨어지는 경우
if i % 3 == 0:
d[i] = min(d[i], d[i // 3] + 1)
# 현재의 수가 5로 나누어 떨어지는 경우
if i % 5 == 0:
d[i] = min(d[i], d[i // 5] + 1)
print(d[x])
반응형
'전.py' 카테고리의 다른 글
[python] 금광 (다이나믹 프로그래밍) (0) | 2022.02.25 |
---|---|
[python] 효율적인 화폐 구성 (0) | 2022.02.25 |
[python] 개미 전사 (다이나믹 프로그래밍) (0) | 2022.02.25 |
[python] 다이나믹 프로그래밍 (0) | 2022.02.25 |
[python] 정렬된 배열에서 특정 수의 개수 구하기 (0) | 2022.02.24 |