λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

πŸ“š Algorithm/Baekjoon

[Baekjoon] λ°±μ€€ 1463 '1둜 λ§Œλ“€κΈ°' λ¬Έμ œν’€μ΄ 파이썬, Python, μ•Œκ³ λ¦¬μ¦˜ 정리

πŸ“ 1463 문제

μ •μˆ˜ X에 μ‚¬μš©ν•  수 μžˆλŠ” 연산은 λ‹€μŒκ³Ό 같이 μ„Έ 가지 이닀.

  1. Xκ°€ 3으둜 λ‚˜λˆ„μ–΄ 떨어지면, 3으둜 λ‚˜λˆˆλ‹€.
  2. Xκ°€ 2둜 λ‚˜λˆ„μ–΄ 떨어지면, 2둜 λ‚˜λˆˆλ‹€.
  3. 1을 λΊ€λ‹€.

μ •μˆ˜ N이 μ£Όμ–΄μ‘Œμ„ λ•Œ, μœ„μ™€ 같은 μ—°μ‚° μ„Έ 개λ₯Ό 적절히 μ‚¬μš©ν•΄μ„œ 1을 λ§Œλ“€λ €κ³  ν•œλ‹€. 연산을 μ‚¬μš©ν•˜λŠ” 횟수의 μ΅œμ†Ÿκ°’μ„ 좜λ ₯ν•˜μ‹œμ˜€.

 

μž…λ ₯ 

첫째 쀄에 1보닀 ν¬κ±°λ‚˜ κ°™κ³ , 10^6보닀 μž‘κ±°λ‚˜ 같은 μ •μˆ˜ N이 주어진닀.

 

좜λ ₯

첫째 쀄에 연산을 ν•˜λŠ” 횟수의 μ΅œμ†Ÿκ°’μ„ 좜λ ₯ν•œλ‹€.

 

 

🧐 풀이

10의 κ²½μš°μ— 10 → 9 → 3 → 1 둜 3번 λ§Œμ— λ§Œλ“€ 수 μžˆλ‹€.

N = int(input())
dp = [0] * (N+1)
for i in range(2, N+1) :
    dp[i] = dp[i-1] + 1
    if i % 2 == 0 :
        dp[i] = min(dp[i], dp[i//2] + 1)
    if i % 3 == 0 :
        dp[i] = min(dp[i], dp[i//3] + 1)

print(dp[N])
728x90