honey_pot
[DP] 8 - 2 1로 만들기 본문
정수 X가 주어질 때 정수 X에 사용할 수 있는 연사능ㄴ 다음과 같이 4가지이다.
- X가 5로 나누어 떨어지면, 5로 나눈다.
- X가 3으로 나누어 떨어지면, 3로 나눈다.
- X가 2로 나누어 떨어지면, 2로 나눈다.
- X에서 1을 뺀다.
정수 X가 주어졌을 때, 연산 4개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력하시오.
입력 조건
- 첫째 줄에 정수 X가 주어진다.(1<=X<=30,000)
출력 조건
- 첫째 줄에 연산을 하느 횟수의 최솟값을 출력한다.
# 정수 X를 입력받기
x = int(input())
# 앞서 계산한 결과를 저장하기 위한 DP 테이블 초기화
d = [0] * 30001
# 보텀업
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])
'이것이 코딩테스트다' 카테고리의 다른 글
[DP] 8 - 4 바닥 공사 (0) | 2021.06.19 |
---|---|
[DP] 8 - 3 개미 전사 (0) | 2021.06.19 |
[DP] 8 - 1 (0) | 2021.06.19 |
[이진 탐색] 7 - 3 떡볶이 떡 만들기 (0) | 2021.06.15 |
[이진 탐색] 7 - 2 부품 찾기 (0) | 2021.06.15 |
Comments