-
[이코테 다이나믹 프로그래밍] 1로 만들기Coding Test/이것이 코딩 테스트다 2021. 1. 10. 04:41
# 문제
정수 X가 주어졌을 때, 정수 X에 사용할 수 있는 연산은 다음과 같이 4가지이다.
ⓐ X가 5로 나누어 떨어지면, 5로 나눈다.
ⓑ X가 3으로 나누어 떨어지면, 3으로 나눈다.
ⓒ X가 2로 나누어 떨어지면, 2로 나눈다.
ⓓ X에서 1을 뺀다.
정수 X가 주어졌을 때, 연산 4개를 적절히 사용해서 값을 1로 만들려고 한다. 연산을 사용하는 횟수의
최솟값을 출력하시오.
예를 들어 정수가 26이면 다음과 같이 계산해서 3번의 연산이 최솟값이다.
1. 26 - 1 = 25 (ⓓ)
2. 25 / 5 = 5 (ⓐ)
3. 5 / 5 = 1 (ⓐ)
# 입력
- 첫째 줄에 정수 X가 주어진다. (1 <= X <= 30,000)
# 출력
- 첫째 줄에 연산을 하는 횟수의 최솟값을 출력한다.
# 입력 예시
26
# 출력 예시
3
내 풀이
x = int(input()) d = [0] * 30001 # DP 테이블 생성 # 다아나믹 프로그래밍 진행 (바텀업) 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])
'Coding Test > 이것이 코딩 테스트다' 카테고리의 다른 글
[이코테 다이나믹 프로그래밍] 바닥 공사 (0) 2021.01.10 [이코테 다이나믹 프로그래밍] 개미 전사 (0) 2021.01.10 [이코테 이진 탐색] 고정점 찾기 (0) 2021.01.10 [이코테 이진 탐색] 정렬된 배열에서 특정 수의 개수 구하기 (0) 2021.01.10 [이코테 이진 탐색] 떡볶이 떡 만들기 (0) 2021.01.10