Potato
์•ˆ๋…•ํ•˜์„ธ์š”, ๊ฐ์žก๋‹ˆ๋‹ค?๐Ÿฅ” ^___^ ๐Ÿ˜บ github ๋ฐ”๋กœ๊ฐ€๊ธฐ ๐Ÿ‘‰๐Ÿป

Algorithm/Baekjoon

[๋ฐฑ์ค€] (Swift) 1463๋ฒˆ - 1๋กœ ๋งŒ๋“ค๊ธฐ (์Šค์œ„ํ”„ํŠธ, DP, ๋™์ ๊ณ„ํš๋ฒ•)

๊ฐ์ž ๐Ÿฅ” 2022. 3. 5. 02:48
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ ๋งํฌ

https://www.acmicpc.net/problem/1463

 

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

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

www.acmicpc.net

 

๋‚ด๊ฐ€ ํ‘ผ ํ’€์ด

  • bottom up ๋ฐฉ์‹์œผ๋กœ ๋ฌธ์ œ ํ’€์ด
  • dp ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๊ฐ€ ์ˆซ์ž๋ฅผ ๋œปํ•˜๊ณ , value๊ฐ€ ๊ทธ ์ธ๋ฑ์Šค๊นŒ์ง€ ๋„๋‹ฌํ• ๋•Œ ์ตœ์†Œ ๊ฒฝ์šฐ์˜ ์ˆ˜์ด๋‹ค. ์ฆ‰, dp ๋ฐฐ์—ด์—๋Š” ๊ทธ ์ˆซ์ž๊นŒ์ง€ ๋„๋‹ฌํ• ๋•Œ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ ํ•ด๋‘๋Š” ๊ฒƒ์ด๋‹ค.
  • 1๋ฒˆ๊ทœ์น™ (3์œผ๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง„๋‹ค) dp[n] = d[n/3] +1 ๋ฐ”๋กœ ์ง์ „ (3์˜๋ฐฐ์ˆ˜๋‹ˆ๊นŒ n/3) ๊ฒฝ์šฐ์˜ ์ˆ˜ ์—์„œ 1์„ ๋”ํ•ด์ฃผ๋Š” ๊ฒƒ
  • 2๋ฒˆ๊ทœ์น™ (2๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง„๋‹ค) dp[n] = dp[n/2] +1
  • 3๋ฒˆ๊ทœ์น™ (1์„ ๋บ€๋‹ค) dp[n] = dp[n-1]+1 1์„ ๋นผ๋Š” ๊ฑด, ๋‹จ์ง€ ๋ฐ”๋กœ ์ „ ์ˆซ์ž์—์„œ ์—ฐ์‚ฐ์„ ํ•˜๋Š” ๊ฒƒ์ด๋ผ n-1์ด๊ณ , 1์„ ๋บ๋‹ค๋Š” ๊ฒฝ์šฐ๋ฅผ ๋”ํ•ด์ฃผ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— +1์ด๋‹ค. (์ฃผ์˜: ๋ฐฐ์—ด์˜ value๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜์ด๋‹ค)
  • ์ž‘์€ ๋ฌธ์ œ๋ถ€ํ„ฐ ํฐ๋ฌธ์ œ๋กœ ํ’€์–ด๊ฐ€๋Š” ๋ฐฉ์‹์ด๋ผ๊ณ  ์ƒ๊ฐ. ๊ทธ๋ž˜์„œ ๋ฐฐ์—ด์„ ํ™œ์šฉํ•จ. (1์—์„œ 2๋กœ๊ฐˆ๋•Œ์˜ ๊ฒฝ์šฐ์˜์ˆ˜ ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ๊ฒฝ์šฐ์˜ ์ˆ˜, 2์—์„œ 3์œผ๋กœ ๊ฐˆ๋•Œ ๊ฒฝ์šฐ์˜ ์ˆ˜ ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ๊ฒฝ์šฐ์˜์ˆ˜,,, ๊ทธ๋ž˜์„œ for ๋ฌธ์„ ํ™œ์šฉํ•œ๋‹ค)
let n = Int(readLine()!)!
var dp = [Int](repeating: 0, count: n+1)

for i in 2..<n+1 {
    dp[i] = dp[i-1] + 1
    if i % 3 == 0 {
        dp[i] = min(dp[i], dp[i/3]+1)
    }
    if i % 2 == 0 {
        dp[i] = min(dp[i], dp[i/2]+1)
    }
}

print(dp[n])

 

 

์šฐ์„  ๋™์ ๊ณ„ํš๋ฒ• (๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ, DP) ์— ๋Œ€ํ•œ ๊ฐœ๋…์ด ์ „ํ˜€ ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ธํ„ฐ๋„ท์˜ ํž˜์„ ์กฐ๊ธˆ ๋นŒ๋ ค ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ๋‹ค. ์•„๋ž˜ ํ•ด๋‹น ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ’€์ดํ•˜๊ธฐ ์ „์— ๋‚ด๊ฐ€ ์ •๋ฆฌํ•ด๋‘” dp  ๊ด€๋ จ ํฌ์ŠคํŒ…์„ ์šฐ์„  ์Šต๋“ ํ•œ ํ›„, ๋ฌธ์ œ๋ฅผ ํ’€์–ด์•ผ ํ–ˆ๋‹ค.

๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ (๋™์  ๊ณ„ํš๋ฒ•, DP) ๊ธฐ๋ณธ ๊ฐœ๋… ๊ณต๋ถ€ํ•˜๊ธฐ

 

[์•Œ๊ณ ๋ฆฌ์ฆ˜] Dynamic Programming (๋™์  ๊ณ„ํš๋ฒ•, DP) (feat. Swift ์Šค์œ„ํ”„ํŠธ)

Dynamic Programming (๋™์  ๊ณ„ํš๋ฒ•) ๋™์ ๊ณ„ํš๋ฒ•(๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ) ์ด๋ž€, ๋ณต์žกํ•œ ๋ฌธ์ œ๋ฅผ ๊ฐ„๋‹จํ•œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆ„์–ด ํ‘ธ๋Š” ๋ฐฉ๋ฒ•์„ ๋งํ•œ๋‹ค. ์ด๊ฒƒ์€ ๋ถ€๋ถ„ ๋ฌธ์ œ ๋ฐ˜๋ณต๊ณผ ์ตœ์  ๋ถ€๋ถ„ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ

didu-story.tistory.com

 

๋ง‰์—ฐํ•˜๊ฒŒ ํ”ผ๋ณด๋‚˜์น˜ ํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ฐœ๋…์„ ๊ณต๋ถ€ํ–ˆ๋‹ค๊ณ  ๋ฌธ์ œ๊ฐ€ ๋ฌด์กฐ๊ฑด์ ์œผ๋กœ ํ’€๋ฆฌ์ง„ ์•Š์•˜๋‹ค. ์—ญ์‹œ๋‚˜ ๊ฐœ๋…์„ ์•Œ๊ณ , ์ด๊ฒƒ์„ ๋‚ด ๊ฒƒ์œผ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋” ๋งŽ์€ ์—ฐ์Šต๊ณผ ๋ฌธ์ œํ’€์ด, ๋…ธ๋ ฅ์ด ํ•„์š”ํ•œ ๊ฒƒ ๊ฐ™๋‹ค.

 

๋ฐ˜์‘ํ˜•