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

Algorithm/Baekjoon

[๋ฐฑ์ค€] (Swift) 11726๋ฒˆ - 2xn ํƒ€์ผ๋ง (DP ๊ธฐ์ดˆ ๋ฌธ์ œ, ๋™์ ๊ณ„ํš๋ฒ• ํ’€์ด)

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

๋ฌธ์ œ ๋งํฌ

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

 

11726๋ฒˆ: 2×n ํƒ€์ผ๋ง

2×n ํฌ๊ธฐ์˜ ์ง์‚ฌ๊ฐํ˜•์„ 1×2, 2×1 ํƒ€์ผ๋กœ ์ฑ„์šฐ๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ์•„๋ž˜ ๊ทธ๋ฆผ์€ 2×5 ํฌ๊ธฐ์˜ ์ง์‚ฌ๊ฐํ˜•์„ ์ฑ„์šด ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์˜ ์˜ˆ์ด๋‹ค.

www.acmicpc.net

 

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

์ฒ˜์Œ์—๋„ ์ด๊ฒŒ ์™œ ๋™์ ๊ณ„ํš๋ฒ•์ธ์ง€ ๋ชฐ๋ž๋‹ค. ์ธํ„ฐ๋„ท์„ ๋Œ€์ถฉ ์ฐธ๊ณ ํ•ด๋ณด๋‹ˆ, ํƒ€์ผ๋ง ๊ฐฏ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚˜๋Š” ๊ทœ์น™์ด ํ”ผ๋ณด๋‚˜์น˜์™€ ๋‹ฎ์•„์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋ฐœ๊ฒฌํ•˜๋ฉด ์‰ฝ๊ฒŒ ํ’€๋ฆด ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ–ˆ๋‹ค.

์ •๋ง, ๊ทธ๋ฆผ์„ ๊ทธ๋ฆฌ๋ฉฐ ํ’€์ด๊ณผ์ •์„ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ ์ผ์ •ํ•œ ๊ทœ์น™๋Œ€๋กœ, ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์˜ ํ˜•ํƒœ๋กœ ์ˆซ์ž๊ฐ€ ์ฆ๊ฐ€ํ•จ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ bottom up ๋ฐฉ์‹์œผ๋กœ for ๋ฌธ์„ ์ด์šฉํ•˜์—ฌ ํ’€์—ˆ๋‹ค.

  • dp ๋ฌธ์ œ์—์„œ ๊ธฐ์–ตํ•  ๊ฒƒ์€, dp ๋ฐฐ์—ด์€ ํ•ญ์ƒ, ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค. dp[9] ์ด๋ฉด 9๋ฒˆ ์œ„์น˜์ผ๋•Œ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ value ๋กœ ๋“ค์–ด๊ฐ„๋‹ค. ๋”ฐ๋ผ์„œ ํ•ด๋‹น ๋ฌธ์ œ์—์„œ๋Š” dp[1]์ผ ๊ฒฝ์šฐ, 2x9 ํƒ€์ผ์ผ ๋•Œ ํƒ€์ผ๋ง ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ๋ฐฐ์—ด๋กœ ๋“ค์–ด๊ฐ„๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
  • ํ•ด๋‹น ๋ฌธ์ œ๋Š” ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์˜ ํ˜•ํƒœ๋ฅผ ๋ˆ๋‹ค. ์•„๋ž˜ ๊ทธ๋ฆผ์„ ๋ณด์ž.

์ด๋ ‡๊ฒŒ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด๋กœ 9๊นŒ์ง€ ๊ณ„์‚ฐํ•ด๋ณด๋ฉด, 55๊ฐ€ ๋˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ๋ฐฑ์ค€์—์„œ ์ฃผ์–ด์ง„ ์˜ˆ์ œ ์ธํ’‹-์˜ˆ์ œ ์ถœ๋ ฅ๊ณผ ์ผ์น˜ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ด ๊ทœ์น™์„ ํ† ๋Œ€๋กœ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ–ˆ๋‹ค!

ํ”ผ๋ณด๋‚˜์น˜๋ฅผ dp ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ์‹์€ ์ด ํฌ์ŠคํŒ…์„ ๋ณด๊ธธ ๋ฐ”๋ž€๋‹ค.

 

์ฒซ๋ฒˆ์งธ ํ’€์ด - ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ

let n = Int(readLine()!)!
var dp = [Int](repeating: 0, count: n+1)

dp[1] = 1
dp[2] = 2

for i in stride(from: 3, through: n, by: 1) {
    dp[i] = (dp[i-1] + dp[i-2]) % 10007
}

print(dp[n])

 

๋‘๋ฒˆ์งธ ํ’€์ด - ๋งž์•˜์Šต๋‹ˆ๋‹ค!

๋ฐฑ์ค€์—์„œ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๋Š” ์˜ˆ์ƒ์น˜ ๋ชปํ•˜๊ฒŒ ์ค‘๊ฐ„์— ํ”„๋กœ๊ทธ๋žจ์ด ์ค‘๋‹จ๋œ ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์™œ ์ค‘๋‹จ๋์„๊นŒ? ๋ถ„๋ช… ์–ด๋Š ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์—์„œ ์ •ํ™•ํ•œ ์ •๋‹ต์„ ์ถœ๋ ฅํ•˜์ง€ ๋ชปํ•˜๊ณ , ์ค‘๋‹จ ๋์„ ๊ฒƒ์ด๋‹ค.

์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋˜์ค‘, ์ฒซ๋ฒˆ์งธ ํ’€์ด ์ฒ˜๋Ÿผ ์ž‘์„ฑํ•˜๊ฒŒ ๋˜๋ฉด, n์ด 1์ผ ๋•Œ, dp[i] = dp[i-1] + dp[i-2] ์ด ๋ถ€๋ถ„์—์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒƒ์ด๋ผ๋Š” ๊ฒƒ์„ ์ฐพ์•„๋ƒˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ณ ์ •๊ฐ’์œผ๋กœ ๋„ฃ์–ด๋‘๋Š” dp[1] ๊ณผ dp[2]์— ๋Œ€ํ•œ ์ถœ๋ ฅ์— ๋Œ€ํ•ด์„œ if ๋ฌธ์„ ํ™œ์šฉํ•˜์—ฌ ๋”ฐ๋กœ ์ž‘์„ฑํ•ด์ฃผ์—ˆ๋‹ค.

let n = Int(readLine()!)!
var dp = [Int](repeating: 0, count: n+1)


if n == 1 {
    print(1)
} else if n == 2 {
    print(2)
} else {
    dp[1] = 1
    dp[2] = 2
    for i in 3..<n+1 {
        dp[i] = (dp[i-1] + dp[i-2]) % 10007
    }
    print(dp[n])
}

 

๋ฐ˜์‘ํ˜•