-
다이나믹 프로그래밍 기초 문제풀이 < 1로 만들기 >Python/알고리즘 2022. 9. 14. 00:04
문제 설명, 조건
● 정수 X가 주어졌을 때, 정수 X에 사용할 수 있는 연산은 다음과 같이 4가지입니다.
1. X가 5로 나누어 떨어지면, 5로 나눕니다.
2. X가 3으로 나누어 떨어지면, 3으로 나눕니다.
3. X가 2로 나누어 떨어지면, 2로 나눕니다.
4. X에서 1을 뺍니다.
● 정수 X가 주어졌을 때, 연산 4개를 적절히 사용해서 값을 1로 만들고자 합니다. 연산을 사용하는 횟수의 최솟값을 출력하세요. 예를 들어 정수가 26이면 다음과 같이 계산해서 3번의 연산이 최솟값입니다.
26 -> 25 -> 5 -> 1
● 입력 조건
첫째 줄에 정수 X가 주어집니다. (1 <= X <= 30,000)
● 출력 조건
첫째 줄에 연산을 하는 횟수의 최솟값을 출력합니다.
● 입력 예시
26
● 출력 예시
3답안 예시
# 정수 X를 입력 받기
x = int(input())
# 앞서 계산된 결과를 저장하기 위한 DP 테이블 초기화
d = [0] * 30
# 다이나믹 프로그래밍(Dynamic Programming) 진행 (보텀업)
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])출처 : https://www.youtube.com/watch?v=5Lu34WIx2Us&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC&index=6
'Python > 알고리즘' 카테고리의 다른 글
다이나믹 프로그래밍 기초 문제풀이 < 금광 > (0) 2022.09.15 다이나믹 프로그래밍 기초 문제풀이 < 효율적인 화폐 구성 > (0) 2022.09.14 다이나믹 프로그래밍 기초 문제풀이 < 개미 전사 > (0) 2022.09.13 다이나믹 프로그래밍 (0) 2022.09.13 이진 탐색 기초 문제풀이 < 정렬된 배열에서 특정 수의 개수 구하기 > (0) 2022.09.13