๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“– Problem Solution/Programmers

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜ Swift

by Fomagran ๐Ÿ’ป 2020. 10. 9.
728x90
๋ฐ˜์‘ํ˜•
 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜

ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜๋Š” F(0) = 0, F(1) = 1์ผ ๋•Œ, 1 ์ด์ƒ์˜ n์— ๋Œ€ํ•˜์—ฌ F(n) = F(n-1) + F(n-2) ๊ฐ€ ์ ์šฉ๋˜๋Š” ์ˆ˜ ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด F(2) = F(0) + F(1) = 0 + 1 = 1 F(3) = F(1) + F(2) = 1 + 1 = 2 F(4) = F(2) + F(3) = 1 + 2 = 3 F(5) = F(3) + F(4) =

programmers.co.kr

Foma's ํ’€์ด

 

ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์€ F(n) = F(n-1) + F(n-2) ๊ฐ€ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. 

 

๊ณ ๋กœ n-1๋ฒˆ์งธ์™€ n-2๋ฒˆ์งธ ์ ์šฉ๋œ ์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ด๋ผ๊ณ  ์ƒ๊ฐ๋ฉ๋‹ˆ๋‹ค. (n-1๋ฒˆ์งธ๋ฅผ before๋กœ n-2๋ฒˆ์งธ๋ฅผ beforebefore๋กœ ๋ถ€๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.)

 

์šฐ์„  2์ด์ƒ์˜ n์ด ์ž…๋ ฅ๋˜๋ฏ€๋กœ ๊ฐ€์žฅ ์ตœ์†Ÿ๊ฐ’์ด 2๋ฅผ ๋„ฃ๋Š”๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด F(2)๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด์„ 

 

before๋Š” F(1) beforebefore๋Š” F(0)๋ฅผ ๋”ํ•œ ๊ฐ’์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. 

 

๊ณ ๋กœ before์˜ ์ดˆ๊ธฐ๊ฐ’์„ 1์œผ๋กœ beforebefore์˜ ์ดˆ๊ธฐ๊ฐ’์„ 0์œผ๋กœ ์„ค์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. -> var before = 1

var beforebefore = 0

 

๋˜ํ•œ n๊ฐ’์„ ์ €์žฅํ•  numbers๋Š” ์ตœ์†Œ๊ฐ’์ด 2์ด๋ฏ€๋กœ ์ดˆ๊ธฐ๊ฐ’์„ 2๋กœ ์„ค์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. -> var numbers = 2

 

๋˜ํ•œ before๊ฐ’์„ ์‚ฌ์ „์— ์ €์žฅํ•  beforeCopy๋ผ๋Š” ๋ณ€์ˆ˜๋„ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค. -> var beforeCopy = 1

 

ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ b(before)์™€ bb(beforebefore)์™€ n์„ ๊ฐ–๋Š” fibo๋ผ๋Š” ํ•จ์ˆ˜๋„ ๋งŒ๋“ค์–ด์ฃผ๊ฒ ์Šต๋‹ˆ๋‹ค. -> func fibo(_ b:Int,_ bb:Int,_ n:Int-> Int{ ... }

 

beforeCopy ๊ฐ’์„ b๋กœ (before๊ฐ’์ด ๋ณ€ํ™”๋˜๋ฏ€๋กœ ๋ฏธ๋ฆฌ ๊ฐ’์„ ์ €์žฅํ•ด๋‘ก๋‹ˆ๋‹ค.) before๊ฐ’์„ (bb + b) % 1234567๋กœ ๋‚˜๋ˆˆ๊ฐ’ beforebefore๋ฅผ before๋ฅผ ์ €์žฅํ•œ beforeCopy๋กœ ๋ฐ”๊ฟ”์ค๋‹ˆ๋‹ค. ->

    beforeCopy = b

    before = (bb + b)%1234567

    beforebefore = beforeCopy

 

numbers๋ฅผ 1 ์ฆ๊ฐ€์‹œ์ผœ์ค๋‹ˆ๋‹ค. (while๋ฌธ์˜ ๋…ผ๋ฆฌ์™€ ๋™์ผ) ->  numbers += 1

 

numbers๊ฐ€ n๋ณด๋‹ค ์ž‘๋‹ค๋ฉด b์— before๊ฐ’์„ bb์— beforebefore๊ฐ’์„ n์— n์„ ๋„ฃ์–ด์ฃผ๊ณ  ์žฌ๊ท€์‹œ์ผœ์ฃผ๊ณ  ์•„๋‹ˆ๋ผ๋ฉด before(n-1)๊ณผ beforebefore(n-2)๋ฅผ ๋”ํ•œ๊ฒƒ์—์„œ 1234567๋กœ ๋‚˜๋ˆ ์ค€ ๋‚˜๋จธ์ง€ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ด์ค๋‹ˆ๋‹ค.

 

if numbers < n {

        return fibo(before, beforebefore, n)

    }else{

        return (before + beforebefore)%1234567

    }

 

์ „์ฒด์ฝ”๋“œ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var numbers = 2
var before = 1
var beforebefore = 0
var beforeCopy = 1
 
func solution(_ n:Int-> Int {
    return fibo(before, beforebefore, n)
}
 
func fibo(_ b:Int,_ bb:Int,_ n:Int-> Int{
    beforeCopy = b
    before = (bb + b)%1234567
    beforebefore = beforeCopy
    
     numbers += 1
    
    if numbers < n {
        return fibo(before, beforebefore, n)
    }else{
        return (before + beforebefore)%1234567
    }
}

ํ—ท๊ฐˆ๋ฆฐ์ 

n๋ฒˆ์งธ ํ”ผ๋ณด๋‚˜์น˜์ˆ˜๋ฅผ 1234567๋กœ ๋‚˜๋ˆ ์ค€ ๋‚˜๋จธ์ง€๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋ผ๊ธธ๋ž˜ ๋ฐ˜๋ณตํ•˜๋‹ค๊ฐ€ ๋งˆ์ง€๋ง‰ n๋ฒˆ์งธ๋งŒ ๋‚˜๋ˆ„๋ฉด ๋˜๋Š”์ค„ ์•Œ์•˜๋Š”๋ฐ ๋ชจ๋“  ๊ณผ์ •์—์„œ 1234567๋กœ ๋‚˜๋ˆ ์ค€ ๋‚˜๋จธ์ง€ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•ด์ฃผ์–ด์•ผํ–ˆ๋‹ค.

func fibo(_ b:Int,_ bb:Int,_ n:Int-> Int{

    ...

    before = (bb + b)%1234567

    ...

}

์ด ๋ถ€๋ถ„

 

 

 

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€