문제
정수 X가 주어질 때 정수 X에 사용할 수 있는 연산은 다음과 같이 4가지 입니다.
a. X가 5로 나누어떨어지면, 5로 나눈다.
b. X가 3으로 나누어떨어지면, 3으로 나눈다.
c. X가 2로 나누어떨어지면, 2로 나눈다.
d. X에서 1을 뺀다.
정수 X가 주어졌을 때, 연산 4개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력하세요.
예를 들어 정수가 26이면 다음과 같이 계산해서 3번의 연산이 최솟값이다.
1. 26 – 1 = 25 (d)
2. 25/5 = 5 (a)
3. 5/5 = 1 (a)
입력 조건
- 첫째 줄에 정수 X가 주어진다. (1 ≤ X ≤ 30,000)
출력 조건
- 첫째 줄에 연산을 하는 횟수의 최솟값을 출력한다.
✔ Solution
x = int(input())
d = [0] * 30001 # 결과를 저장하기 위한 테이블
for i in range(2, x + 1):
# 먼저 1을 뺏을 경우 나오는 경우의 수 저장
d[i] = d[i - 1] + 1
# 2로 나누어질 경우 기존 1을 뺏을 경우의 수와 비교하여 최솟값 저장
if i % 2 == 0:
d[i] = min(d[i], d[i // 2] + 1)
if i % 3 == 0:
d[i] = min(d[i], d[i // 3] + 1)
if i % 5 == 0:
d[i] = min(d[i], d[i // 5] + 1)
print(d[i])
'알고리즘 > 기타 알고리즘' 카테고리의 다른 글
최단 경로 (Shortest Path Problem) : 다익스트라 알고리즘 (0) | 2022.01.24 |
---|---|
[이것이 코딩 테스트다 with Python] 개미 전사 : Dynamic Programming (0) | 2022.01.24 |
Dynamic Programming 동적 프로그래밍 (0) | 2022.01.24 |
[이것이 코딩 테스트다 with Python] 두 배열의 원소 교체 (0) | 2022.01.24 |
[이것이 코딩 테스트다 with Python] 떡볶이 떡 만들기 : 이진 탐색 (0) | 2022.01.24 |