Algorithm/๋ฐฑ์ค€(BOJ)

[๋ฐฑ์ค€(BOJ) / Python] 1463๋ฒˆ: 1๋กœ ๋งŒ๋“ค๊ธฐ

meeeeejin 2021. 3. 30. 21:51

๋ฌธ์ œ ๋งํฌ: www.acmicpc.net/problem/1463

 

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

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

www.acmicpc.net

 

๋ฌธ์ œ ์„ค๋ช…

์‹œ๊ฐ„ ๋‚ด์— ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด์„  ๋™์  ๊ณ„ํš๋ฒ•(Dynamic Programming)์„ ์ด์šฉํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผ ํ•œ๋‹ค. 

1๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์—ฐ์‚ฐ ํšŸ์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” dpํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค๊ณ  dp[1]๋ถ€ํ„ฐ dp[n]๊นŒ์ง€๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค. 

 

dp[1] = 0

dp[2] = dp[1] + 1  // 2๋กœ ๋‚˜๋ˆ„๊ฑฐ๋‚˜ 1์„ ๋นผ๊ธฐ

dp[3] = dp[1] + 1  // 3์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ

dp[4] = dp[2] + 1 = dp[3] + 1  // 2๋กœ ๋‚˜๋ˆ„๊ฑฐ๋‚˜ 1์„ ๋นผ๊ธฐ

dp[5] = dp[4] + 1  // 1์„ ๋นผ๊ธฐ

dp[6] = dp[2] + 1 = dp[3] + 1  // 2๋กœ ๋‚˜๋ˆ„๊ฑฐ๋‚˜ 3์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ

.

.

 

์ด๋•Œ ์ฃผ์˜ํ•  ์ ์€ dp[6] ๊ฐ™์€ ๊ฒฝ์šฐ 3์œผ๋กœ๋„ ๋‚˜๋ˆ ์ง€๊ณ  2๋กœ๋„ ๋‚˜๋ˆ ์ง€๊ณ  1์„ ๋นผ๋Š” ์—ฐ์‚ฐ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค. ํ•˜์ง€๋งŒ ์ด ์ค‘์—์„œ ์—ฐ์‚ฐ ํšŸ์ˆ˜๊ฐ€ ์ตœ์†Œ๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ๋ฅผ dp์— ์ €์žฅํ•ด์•ผ ํ•œ๋‹ค. ์ฝ”๋“œ์—์„œ๋Š” minํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ์ด๋ฅผ ๊ตฌํ˜„ํ–ˆ๋‹ค. 

 

 

 

์†Œ์Šค์ฝ”๋“œ

n = int(input())
INF = 987654321
# 1๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์—ฐ์‚ฐ ํšŸ์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” dp ํ…Œ์ด๋ธ”
dp = [INF] * (n + 1)
dp[1] = 0

for i in range(2, n + 1):
    # 3์œผ๋กœ ๋‚˜๋ˆ„๋Š” ์—ฐ์‚ฐ
    if i % 3 == 0:
        dp[i] = min(dp[i], dp[i // 3] + 1)
    # 2๋กœ ๋‚˜๋ˆ„๋Š” ์—ฐ์‚ฐ
    if i % 2 == 0:
        dp[i] = min(dp[i], dp[i // 2] + 1)
    # 1์„ ๋นผ๋Š” ์—ฐ์‚ฐ
    dp[i] = min(dp[i], dp[i - 1] + 1)

print(dp[n])

 

 

 

 

728x90