๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ Algorithm/์•Œ๊ณ ๋ฆฌ์ฆ˜-Swift

[99ํด๋Ÿฝ ์ฝ”ํ…Œ ์Šคํ„ฐ๋”” 2์ผ์ฐจ TIL] ๋ฐฑ์ค€ ํ”ผ๋ณด๋‚˜์น˜ ๋น„์Šค๋ฌด๋ฆฌํ•œ ์ˆ˜์—ด Swift

by Danna 2025. 4. 2.
728x90
728x90

์˜ค๋Š˜์˜ ๋ฌธ์ œ

- ๋ฐฑ์ค€ ํ”ผ๋ณด๋‚˜์น˜ ๋น„์Šค๋ฌด๋ฆฌํ•œ ์ˆ˜์—ด

- https://www.acmicpc.net/problem/14495

์˜ค๋Š˜์˜ ํ•™์Šต ํ‚ค์›Œ๋“œ

- ์žฌ๊ท€ํ•จ์ˆ˜์˜ ๋ฌธ์ œ์ , ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ (DP) ๋ฐฉ์‹, ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด

 

 

์ž˜๋ชป๋œ ์ ‘๊ทผ 

1. ๋‹จ์ˆœํ•˜๊ฒŒ ์žฌ๊ท€ ํ•จ์ˆ˜๋กœ f(n) = f(n-1) + f(n-3) ๋กœ ๋„์ „ํ•ด๋ณด์•˜์œผ๋‚˜ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

- ์ผ๋ฐ˜์ ์œผ๋กœ ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ๋งŽ์•„์งˆ ๊ฒฝ์šฐ์—๋Š” ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

- ํ•จ์ˆ˜ ํ˜ธ์ถœ ์Šคํƒ์ด ์Œ“์ด๊ธฐ ๋•Œ๋ฌธ์— ์ œํ•œ์ด ๋˜๋Š”๊ฒŒ ์•„๋‹๊นŒ ์‹ถ๋‹ค.

2. ์ค‘๊ฐ„์— ๊ณ„์‚ฐํ•œ ๊ฒฐ๊ณผ๋ฅผ Array ์— ์ €์žฅํ•˜๊ณ  ๋น ๋ฅด๊ฒŒ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ–ˆ์ง€๋งŒ, ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ๋งŽ์•„ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๋กœ ์‹คํŒจํ–ˆ๋‹ค.

3. 1 <= n <= 116 ์œผ๋กœ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ 117๋กœ ์„ค์ •ํ–ˆ์–ด์•ผ ํ•˜๋Š”๋ฐ 116์œผ๋กœ ํ•ด์„œ index error ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

- ์žฌ๊ท€ ํ•จ์ˆ˜๊ฐ€ ์•„๋‹Œ ๋ฐ˜๋ณต๋ฌธ์„ ์ด์šฉํ•ด ํ”ผ๋ณด๋‚˜์น˜ ๋น„์Šค๋ฌด๋ฆฌํ•œ ์ˆ˜์—ด์˜ ๊ฐ’์„ ๊ณ„์‚ฐํ–ˆ๋‹ค.

- ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฉด์„œ ํ•ด๋‹น ์ธ๋ฑ์Šค์˜ ๊ฐ’์„ ๊ณ„์‚ฐํ•˜๊ณ , ๋ฐฐ์—ด์— ๊ฐ’์„ ๋ฏธ๋ฆฌ ์ €์žฅํ•ด๋’€๋‹ค. (๋งค๋ฒˆ ๊ณ„์‚ฐํ•˜๋ฉด ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—)

 

import Foundation

func fibonachi(_ n: Int) -> Int {
    var fibonachiArray = Array(repeating: 0, count: 117)

    if n == 1 || n == 2 || n == 3 {
        return 1
    } else {
        for i in 1...3 {
            fibonachiArray[i] = 1
        }
        for i in 4...n {
            fibonachiArray[i] = fibonachiArray[i-1] + fibonachiArray[i-3]
        }
    }

    return fibonachiArray[n]
}

if let input = readLine(), let n = Int(input) {
    let result = fibonachi(n)
    print(result)
}

 

 

์˜ค๋Š˜์˜ ํšŒ๊ณ 

1. ์˜ค๋žœ๋งŒ์— ํ•˜๋‹ˆ readLine() ๋„ ํ—ท๊ฐˆ๋ ค์„œ ํ—ค๋งธ์—ˆ๋‹ค.

2. ๋™์  ๊ณ„ํš๋ฒ• (Dynamic Programmin) ์€ ํฐ ๋ฌธ์ œ๋ฅผ ์ž‘์€ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆ„์–ด ํ‘ธ๋Š” ๋ฌธ์ œ๋กœ ์–ด๋–ค ๊ฒฝ์šฐ์— ์ ์šฉ๋˜๋Š”์ง€ ์ •๋ฆฌ๊ฐ€ ํ•„์š”ํ•ด๋ณด์ธ๋‹ค.

- ๋ถ€๋ถ„ ๋ฌธ์ œ์˜ ์ค‘๋ณต : ๊ฐ ํ•ญ์€ ์ด์ „ ํ•ญ๋“ค์˜ ํ•ฉ "f(n) = f(n-1) + f(n-3)" ์œผ๋กœ ์ •์˜๋˜๋Š”๊ฒƒ์ด ๋ถ€๋ถ„ ๋ฌธ์ œ๊ฐ€ ๋ฐ˜๋ณต๋œ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

- ๋ฉ”๋ชจ์ด์ œ์ด์…˜(memoization) : ๋™์  ๊ณ„ํš๋ฒ•์€ ์ด๋ฏธ ๊ณ„์‚ฐ๋œ ๊ฐ’์„ ์ €์žฅํ•ด์„œ ๋™์ผํ•œ ๊ณ„์‚ฐ์„ ๋ฐ˜๋ณตํ•˜์ง€ ์•Š๋„๋ก ํ•œ๋‹ค. ์ด์ „์— ๊ณ„์‚ฐํ•œ ๊ฐ’์„ ์ด์šฉํ•œ๋‹ค๋Š” ์ ์—์„œ ํžŒํŠธ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

- ์ ํ™”์‹ ์‚ฌ์šฉ : "f(n) = f(n-1) + f(n-3)" ๋กœ ์ •์˜๋˜๋Š” ์ ํ™”์‹์„ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ ์ž์ฒด๊ฐ€ ์ž‘์€ ๋ถ€๋ถ„ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆ„์–ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋œป์ด๋‹ค.



728x90
728x90