AI 그게 뭔데
끄적끄적 개발일지
AI 그게 뭔데
전체 방문자
오늘
어제
  • 분류 전체보기 (342)
    • 논문 (5)
    • DL(Deep-Learning) (34)
      • 개념 (14)
      • Python 기초 (14)
      • Tensorflow (6)
      • Pytorch (0)
    • NLP (10)
    • OpenCV (53)
    • DevOps (10)
      • AWS (2)
      • Docker & Kubernetes (4)
      • Spark (3)
      • SQL (1)
    • MacOS (1)
    • React-Native (2)
    • BI (3)
      • GA(Google Analytics) (3)
      • Tableau (0)
    • 알고리즘 (221)
      • 백준 (76)
      • 프로그래머스 (108)
      • 기타 알고리즘 (37)

인기 글

태그

  • 연습문제
  • 파이썬
  • 이코테
  • LEVEL2
  • 알고리즘
  • Python
  • 백준
  • OpenCV
  • 프로그래머스
  • level1

최근 글

hELLO · Designed By 정상우.
AI 그게 뭔데

끄적끄적 개발일지

알고리즘/기타 알고리즘

[이것이 코딩 테스트다 with Python] 1로 만들기 : Dynamic Programming

2022. 1. 24. 21:30

문제

정수 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
    AI 그게 뭔데
    AI 그게 뭔데
    공부와 개발 그리고 AI가 약간 첨가된 흔적 남기기

    티스토리툴바