์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ/BOJ_Python

[BOJ/Step15] 1463 : 1๋กœ ๋งŒ๋“ค๊ธฐ (Python)

NaNaRin๐Ÿ™ƒ 2021. 2. 25. 21:32

www.acmicpc.net/problem/1463

 

1463๋ฒˆ: 1๋กœ ๋งŒ๋“ค๊ธฐ

์ฒซ์งธ ์ค„์— 1๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 106๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ •์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค.

www.acmicpc.net


์ฒ˜์Œ์—” ์ž…๋ ฅ๊ฐ’์ด ๋„ˆ๋ฌด ์ปค์„œ ์ˆœ์„œ๋Œ€๋กœ ํ•˜๋ฉด ๋ฌด์กฐ๊ฑด ์‹œ๊ฐ„์ดˆ๊ณผ ๋‚  ์ค„ ์•Œ๊ณ  ๊ฒ๋จน์—ˆ๋‹ค

๊ทผ๋ฐ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ๋– ์˜ค๋ฅด์ง€ ์•Š์•„์„œ ์ผ๋‹จ ์ด์ „ dp๋ฌธ์ œ๋“ค์ฒ˜๋Ÿผ ํ’€์–ด๋ด„

 

๋ฆฌ์ŠคํŠธ์— ๊ฐ ์ˆซ์ž๊ฐ€ ์ž…๋ ฅ๋˜์—ˆ์„ ๋•Œ์˜ ์ตœ์†Œ ์—ฐ์‚ฐ ์ˆ˜๋ฅผ ์ €์žฅํ•  ๊ฒƒ!

 

๊ทธ ์ˆซ์ž๋Š” 1์„ ๋นผ๊ฑฐ๋‚˜, 3์œผ๋กœ ๋‚˜๋ˆ„๊ฑฐ๋‚˜, 2๋กœ ๋‚˜๋ˆ ์•ผ ํ•œ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์—ฐ์‚ฐ ํšŸ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•ด์•ผ ํ•˜๋‹ˆ๊นŒ

1์„ ๋นผ๊ฑฐ๋‚˜, 3์œผ๋กœ ๋‚˜๋ˆ„๊ฑฐ๋‚˜, 2๋กœ ๋‚˜๋ˆด์„ ๋•Œ ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ์—ฐ์‚ฐ ํšŸ์ˆ˜๋ฅผ ๊ฐ€์ง„ ์—ฐ์‚ฐ์„ ํ–‰ํ•˜๋ฉด ๋œ๋‹ค.

f(n) = min(f(n-1), f(n//3), f(n//2)) + 1

 

1. ๋ฆฌ์ŠคํŠธ num์— ๋ฏธ๋ฆฌ n๊ฐœ์˜ 0์„ ๋„ฃ์–ด๋‘๊ณ  num[2], num[3]์—๋Š” 1์„ ์ €์žฅ

2. 4๋ถ€ํ„ฐ n๊นŒ์ง€ ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด ๊ฐ’์„ ๋„ฃ์„ ๊ฒƒ

  2-1. num[i]์— num[i-1] + 1์„ ์ €์žฅ ( i๊ฐ€ 2๋‚˜ 3์œผ๋กœ ๋‚˜๋ˆ„์–ด์ง€์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ )

  2-2. i๊ฐ€ 3์œผ๋กœ ๋‚˜๋ˆ„์–ด์ง€๋ฉด num[i]์™€ num[i//3]+1 ์„ ๋น„๊ตํ•˜์—ฌ ๋” ์ž‘์€ ์ˆ˜๋ฅผ ์ €์žฅ

         ( ์ด๋ฏธ num[i]์—๋Š” num[i-1] + 1์ด ์ €์žฅ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ )

  2-3.  i๊ฐ€ 2๋กœ ๋‚˜๋ˆ„์–ด์ง€๋ฉด num[i]์™€ num[i//2]+1 ์„ ๋น„๊ตํ•˜์—ฌ ๋” ์ž‘์€ ์ˆ˜๋ฅผ ์ €์žฅ

         ( ์ด๋ฏธ num[i]์—๋Š” num[i-1] + 1 ๋˜๋Š” num[i//3]+1 ์ด ์ €์žฅ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ )

3. num[n]์„ ์ถœ๋ ฅ

# 1463.py

n = int(input())

num = [0, 0, 1, 1] + [0 for _ in range(n-3)]

for i in range(4, n+1):
    num[i] = num[i-1] + 1
    if i % 3 == 0:
        num[i] = min(num[i], num[i//3] + 1)
    if i % 2 == 0:
        num[i] = min(num[i], num[i//2] + 1)

print(num[n])