티스토리 뷰

반응형

 - 백준 알고리즘  : https://www.acmicpc.net/problem

문제

  • 정수 X에 사용할 수 있는 연산은 다음과 같이 세 가지 이다.

    • X가 3으로 나누어 떨어지면, 3으로 나눈다.

    • X가 2로 나누어 떨어지면, 2로 나눈다.

    • 1을 뺀다.

  • 정수 N이 주어졌을 때, 위와 같은 연산 세 개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최소값을 출력하시오.



입력

  • 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 자연수 N이 주어진다.

출력

  • 첫째 줄에 연산을 하는 횟수의 최소값을 출력한다.


예제 입력

  • 2

예제 출력

  • 1


곰가드의 코드


a = int(input()) + 1

min_cnt = [ -1 for i in range(a)] 

for i in range(1,a):
    min_cnt[i] = min_cnt[i-1] + 1
    if i % 2 == 0:
        min_cnt[i] = min([min_cnt[i], min_cnt[int(i/2)]+1])
    if i % 3 == 0:
        min_cnt[i] = min([min_cnt[i], min_cnt[int(i/3)]+1])

print(min_cnt[-1])

  • 동적 프로그래밍을 이용 각 수마다 최소값을 구한 뒤 min_cnt 리스트에 저장해 줍니다.

  • 1을 더했을 때, 2 를 곱했을 때, 3 을 곱했을 때 를 매번 비교하면서 최소값을 추가하는 것이 이 코드의 핵심입니다.


참고할 파이썬 코드



반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함