국문과 유목민

[DP] 1로 만들기 본문

알고리즘_코딩테스트/이것이 코딩테스트다

[DP] 1로 만들기

논곰 2021. 12. 7. 23:18

1. 문제 설명

- 주어진 수를 1로 만들기 위해 수행해야 하는 연산의 횟수를 구하는 문제

- 2, 3, 5를 나누는 연산이 존재

2. 코드

n = int(input())
df = [0]*(n+1)

for i in range(2, n+1):
    df[i] = df[i-1]+1
    if i%2==0:
        df[i] = min(df[i], df[i//2]+1)
    elif i%3==0:
        df[i] = min(df[i], df[i//3]+1)
    elif i%5==0:
        df[i] = min(df[i], df[i//5]+1)
print(df[n])

"""
6
>> 2
"""

3. 코멘트

- 코드는 간단했으나 횟수 추가 부분을 이해하는데 시간이 좀 걸렸었다.

- 문제 풀이 방식이 DP였다는 것을 생각해서 이해를 했던 것 같다. 

'알고리즘_코딩테스트 > 이것이 코딩테스트다' 카테고리의 다른 글

[DP] 바닥공사  (0) 2021.12.07
[DP] 개미전사  (0) 2021.12.07
[이진탐색] 부품찾기  (0) 2021.12.07
[이진탐색] 떡볶이 떡 만들기  (0) 2021.12.07
[정렬] 두 배열의 원소 교체  (2) 2021.12.07
Comments