본문 바로가기
코딩 테스트/다이나믹 프로그래밍

1로 만들기

by hazel_ 2021. 2. 21.

p. 217

 

방법 1

x=int(input())

d=[0]*30001

# 1일때는 연산횟수가 0임
for i in range(2,x+1):
  # -1을 한 경우
  d[i]=d[i-1]+1

  if i%5==0:
    d[i]=min(d[i],d[i//5]+1)
  if i%3==0:
    d[i]=min(d[i],d[i//3]+1)
  if i%2==0:
    d[i]==min(d[i],d[i//2]+1)

print(d[x])

 

방법 2

n=int(input())

dp=[999]*((n+1)*3)
dp[0]=0
dp[1]=0
nn=0
for i in range(n+1):
  dp[i*3]=min(dp[i]+1, dp[i*3])
  dp[i*2]=min(dp[i]+1, dp[i*2])
  dp[i+1]=min(dp[i]+1, dp[i+1])

print(dp[n])

'코딩 테스트 > 다이나믹 프로그래밍' 카테고리의 다른 글

정수 삼각형  (0) 2021.02.22
금광  (0) 2021.02.22
효율적인 화폐 구성  (0) 2021.02.21
바닥 공사  (0) 2021.02.21
개미 전사  (0) 2021.02.21

댓글