๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
3๏ธโƒฃ Swift/Problem Solving

[Swift Algorithm] 2×n ํƒ€์ผ๋ง BOJ #11726

by seolhee2750 2021. 10. 20.
๋ฌธ์ œ ์„ค๋ช…

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

์•„๋ž˜ ๊ทธ๋ฆผ์€ 2×5 ํฌ๊ธฐ์˜ ์ง์‚ฌ๊ฐํ˜•์„ ์ฑ„์šด ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์˜ ์˜ˆ์ด๋‹ค.

 

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— n์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ n ≤ 1,000)

 

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— 2×n ํฌ๊ธฐ์˜ ์ง์‚ฌ๊ฐํ˜•์„ ์ฑ„์šฐ๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ 10,007๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

์ž…์ถœ๋ ฅ ์˜ˆ์ œ

์ž…๋ ฅ

9

์ถœ๋ ฅ

55

 

๋‚ด ๋ฌธ์ œ ํ’€์ด
let N = Int(readLine()!)!
var dp = Array(repeating: 0, count: 1001)

func solution(_ n: Int) -> Int {
    if n == 1 { return 1 }
    if n == 2 { return 2 }
    if dp[n] > 0 { return dp[n] } // ์ค‘๋ณต์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•จ
    dp[n] = (solution(n-2) + solution(n-1)) % 10007
    return dp[n]
}

print(solution(N))

๐Ÿ‘‰ DP ๋ฌธ์ œ๋กœ, ์ ํ™”์‹์„ ๊ตฌํ•ด์ฃผ๋Š”๊ฒŒ ํฌ์ธํŠธ!

 

[์ ํ™”์‹]

  • n์ด 1์ผ ๊ฒฝ์šฐ ๋‹ต์€ 1
  • n์ด 2์ผ ๊ฒฝ์šฐ ๋‹ต์€ 2
  • n์ด 3์ผ ๊ฒฝ์šฐ ๋‹ต์€ 3
  • n์ด 4์ผ ๊ฒฝ์šฐ ๋‹ต์€ 5
  • n์ด 5์ผ ๊ฒฝ์šฐ ๋‹ต์€ 8

=> ์ด์ „ ๋‘ ์ˆ˜์˜ ๋‹ต์„ ๊ตฌํ•œ ๊ฐ’์ด ํ˜„์žฌ์˜ ๋‹ต์ด ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

=> dp[n] = dp[n-1] + dp[n-2] 

 

[์ฝ”๋“œ ์„ค๋ช…]

  • n์ด 1, 2์ผ ๊ฒฝ์šฐ์—๋Š” ์ด์ „ ๋‘ ์ˆ˜๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ฐ”๋กœ ํ•ด๋‹นํ•˜๋Š” ๋‹ต์„ returnํ–ˆ๋‹ค.
  • dp[n]์ด 0๋ณด๋‹ค ํด ๊ฒฝ์šฐ(0์ด ์•„๋‹ ๊ฒฝ์šฐ) dp[n] ๊ฐ’์„ ๊ทธ๋Œ€๋กœ returnํ–ˆ๋‹ค.
    => dp[n]์— 0์ด ์•„๋‹Œ ์–ด๋–ค ๊ฐ’์ด ์ €์žฅ๋˜์–ด์žˆ๋‹ค๋Š” ๊ฒƒ์€ ์ด๋ฏธ dp[n]์€ ๊ณ„์‚ฐ๋œ์ ์ด ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.
    ๊ตณ์ด ์ค‘๋ณต๋œ ๊ณ„์‚ฐ์„ ๋˜ ํ•ด์ค„ ํ•„์š”๋Š” ์—†๊ธฐ ๋•Œ๋ฌธ์— ์—ฐ์‚ฐ ์—†์ด ๊ทธ๋Œ€๋กœ์˜ ๊ฐ’์„ ๋ฆฌํ„ดํ•œ๋‹ค.
    (dp์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํ•ต์‹ฌ๊ณผ๋„ ๊ฐ™์€ ๋ถ€๋ถ„์ด๊ธฐ๋„ ํ•จ. ๐Ÿ‘‡์ด์ „ ๊ฒŒ์‹œ๊ธ€ ์ฐธ๊ณ !)
    2021.08.28 - [๐Ÿ“ Algorithm Note/๐Ÿ” with Swift] - [Swift Algorithm Note] ๋™์  ๊ณ„ํš๋ฒ• (feat. Fibonacci)
  •  ์œ„์˜ ์˜ˆ์™ธ์— ๊ฑธ๋ฆฌ์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋Š” ์žฌ๊ท€ ํ˜ธ์ถœ๋กœ ์ ํ™”์‹์„ ๊ตฌํ˜„ํ•ด์ฃผ์—ˆ๋‹ค.

 

๐Ÿ’ก ํ”ผ๋“œ๋ฐฑ
  • ์ฒ˜์Œ์—” ์ค‘๋ณต์„ ํ”ผํ•ด์ฃผ๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„์„œ ๊ณ„์† ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚ฌ์—ˆ๋Š”๋ฐ,
    ๋””๋ฒ„๊น…ํ•˜๋ฉด์„œ ํ™•์ธํ•ด๋ณด๋‹ˆ๊นŒ ๊ณ„์† ์ค‘๋ณต๋œ ๊ณ„์‚ฐ์„ ํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค.
    DP์ธ๋งŒํผ, ์ค‘๋ณต์— ๋Œ€ํ•ด์„œ ๋” ์‹ ๊ฒฝ์จ์ฃผ์–ด์•ผ ํ•  ๊ฒƒ ๊ฐ™๋‹ค.

 


๋ฌธ์ œ

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

๋Œ“๊ธ€