λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
🧩 Algorithm/λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ°

[λ°±μ€€] 1463번: 1둜 λ§Œλ“€κΈ°

by HelloRabbit 2023. 2. 17.
728x90

Hint

1. nμ—μ„œ 2λ‚˜ 3을 λ‚˜λˆ„κ±°λ‚˜ 1을 λΊ„ μƒκ°ν•˜μ§€ 말고 1λΆ€ν„° κ³ λ €ν•˜λŠ” μ½”λ“œλ‘œ μ§œμ•Όν•¨
2. 1λΆ€ν„° nκΉŒμ§€μ˜ 숫자λ₯Ό 각각 λ§Œλ“€κΈ° μœ„ν•΄μ„  λͺ‡λ²ˆμ˜ μ—°μ‚° νšŸμˆ˜κ°€ ν•„μš”ν•œμ§€ 생각해봐야 함

3. Memoization 기법 ν™œμš©

 

 

λ°±μ€€ 1463번: 1둜 λ§Œλ“€κΈ° (풀어보기)

n = int(input())

ans = [0] * (n+1)   # ans[i] = iκ°€ 1이 되기 μœ„ν•œ μ—°μ‚° 횟수

for i in range(2, n+1):
    ans[i] = ans[i-1] + 1   # λ””ν΄νŠΈλ‘œλŠ” κ·Έ μ „ μˆ«μžμ—μ„œ +1 ν•œκ±°λ‹ˆκΉŒ νšŸμˆ˜λ„ κ·Έ μ „ 숫자의 νšŸμˆ˜μ— +1 ν•œκ²ƒμž„
    if i % 3 == 0:
        ans[i] = min(ans[i], ans[i // 3] + 1)   # λ””ν΄νŠΈμ™€ x3 ν•˜κΈ° μ „μ˜ 숫자의 νšŸμˆ˜μ—μ„œ +1 ν•œκ±° 쀑에 더 μž‘μ€ μˆ˜κ°€ 졜적의 횟수!
    if i % 2 == 0:
        ans[i] = min(ans[i], ans[i // 2] + 1)   # 이미 λ“€μ–΄μžˆλŠ” κ°’κ³Ό x2 ν•˜κΈ° μ „μ˜ 숫자의 νšŸμˆ˜μ—μ„œ +1 ν•œκ±° 쀑에 더 μž‘μ€ μˆ˜κ°€ 졜적의 횟수!

print(ans[n])

 

 

 

λŒ“κΈ€