๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ

2020. 9. 7. 19:13ใ†์ด๊ฒƒ์ด ์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋‹ค/๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ

๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ

 

๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ž€ ๋ฌด์—‡์ผ๊นŒ?

๋‚˜๋Š” ๋‹ค์ด๋‚˜๋ฏน ๊ด€๋ จ ๋ฌธ์ œ๋ฅผ ๊ณ„์†ํ•ด์„œ ํ’€๊ณ  ์žˆ์ง€๋งŒ, ์ฒ˜์Œ๋ถ€ํ„ฐ ํ’€์ง€๋ชปํ•˜๊ณ  ๊ณ„์† ๋‹ต์ง€๋ฅผ ๋ณด๊ณ  ํ’€๊ณ ์žˆ๋‹ค.

์ด๊ฒŒ ๊ณผ์—ฐ ์‹ค๋ ฅ์ด ๋Š˜๊ธด ํ•˜๋Š”๊ฑธ๊นŒ? ๋ฐ”๋‹ฅ๊ณต์‚ฌ ๋ฌธ์ œ๋ฅผ ํ’€๋‹ค๊ฐ€ ๋„์ €ํžˆ ์ดํ•ด๊ฐ€ ๊ฐ€์ง€ ์•Š์•„ ๋ธ”๋กœ๊ทธ์— ์ฒ˜์Œ ๊ฐœ๋…๋ถ€ํ„ฐ ๋‹ค์‹œ ์ •๋ฆฌํ•ด ๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

 

 

๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๋ณดํ†ต ์—ฐ์‚ฐ์†๋„๋ฅผ ๋น ๋ฅด๊ฒŒํ•˜๊ฑฐ๋‚˜ ๋ฉ”๋ชจ๋ฆฌ๊ณต๊ฐ„์„ ์ตœ๋Œ€ํ•œ์œผ๋กœ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

 

ํ”ํžˆ ์ด๋ฅผ '์ ํ™”์‹'์ด๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค. 

 

๋Œ€ํ‘œ์ ์ธ ์˜ˆ์‹œ๋Š” 'ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด'์ด๋‹ค.

 

ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์€ n๋ฒˆ์งธ ์ˆซ์ž๋ฅผ ์•Œ๊ณ  ์‹ถ์–ดํ•  ๋•Œ n๋ฒˆ์งธ ์ˆซ์ž๋Š” n-1๋ฒˆ์งธ ์ˆซ์ž์™€ n-2๋ฒˆ์งธ ์ˆซ์ž๋ฅผ ๋”ํ•œ ๊ฐ’์ด๋˜๊ณ  ์ด๋Ÿฌํ•œ ๊ทœ์น™์„ ๋”ฐ๋ฅด๋Š” ์ˆ˜์—ด์ด๋‹ค.

 

๋‹ค์Œ์€ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์˜ ์žฌ๊ท€์ ์ธ ์†Œ์Šค์ฝ”๋“œ์ด๋‹ค.

 

def fibo(n) :
  if n ==1 or n==2:
    return 1
  else :
    return fibo(n-1)+fibo(n-2)
    
print(fibo(4))

 

ํ•˜์ง€๋งŒ ์žฌ๊ท€ํ•จ์ˆ˜๋Š” ์‹œ๊ฐ„๋ณต์žก๋„๋กœ 2^n์„ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— n์ด ์กฐ๊ธˆ๋งŒ ์ปค์ ธ๋„ ์ˆ˜ํ–‰์†๋„๊ฐ€ ๊ธ‰๊ฒฉํ•˜๊ฒŒ ์ฆ๊ฐ€ํ•œ๋‹ค.

 

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋Š” ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์šฐ์„  ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์“ฐ๊ธฐ์œ„ํ•ด์„œ ๋‘๊ฐ€์ง€ ์ƒํ™ฉ์ด ํ•„์š”ํ•˜๋‹ค.

 

1.ํฐ ๊ฒƒ์„ ์ž‘์€ ๊ฒƒ์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

2. ์ž‘์€ ๋ฌธ์ œ์—์„œ ๊ตฌํ•œ ์ •๋‹ต์€ ๊ทธ๊ฒƒ์„ ํฌํ•จํ•˜๋Š” ํฐ ๋ฌธ์ œ์—์„œ๋„ ๋™์ผํ•˜๋‹ค.

 

์ด ํ”ผ๋ณด๋‚˜์น˜ ๋ฌธ์ œ๋ฅผ '๋ฉ”๋ชจ๋ฆฌ ์ œ์ด์…˜'์„ ํ†ตํ•ด์„œ ํ’€์–ด๋ณด์ž.

'๋ฉ”๋ชจ๋ฆฌ ์ œ์ด์…˜' : ํ•œ๋ฒˆ ๊ตฌํ•œ ๊ฐ’์„ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•ด๋‘๊ณ  ๋‹ค์‹œ ๊ทธ๊ฐ’์„ ํ˜ธ์ถœํ•œ๋‹ค๋ฉด ๋ฉ”๋ชจํ•œ ๊ฒฐ๊ณผ๋ฅผ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์˜ค๋Š” ๊ธฐ๋ฒ•

์ด๋ฅผ '์บ์‹ฑ'์ด๋ผ๊ณ ๋„ ์นญํ•œ๋‹ค.

 

๋‹ค์Œ ์ฝ”๋“œ๋Š” ์บ์‹ฑ์„ ์ด์šฉํ•œ ์žฌ๊ท€ํ•จ์ˆ˜์ด๋‹ค.

d = [0]*100

def fibo(x):
  if x==1 or x==2:
    return 1   #์ข…๋ฃŒ์กฐ๊ฑด : 1ํ˜น์€ 2์ผ ๋•Œ 1๋ฐ˜ํ™˜
  if d[x]!=0 :
    return d[x] #๊ณ„์‚ฐํ•œ์ ์ด ์žˆ๋‹ค๋ฉด ๋ฐ”๋กœ ๋ฐ˜ํ™˜
  d[x] = fibo(x-1) + fibo(x-2) #๊ณ„์‚ฐํ•œ์ ์ด ์—†๋‹ค๋ฉด fibo์žฌ๊ท€์ด์šฉ
  return d[x]
  
print(fibo(4))
 
  

 

์ด๋Ÿฌํ•œ ํฐ ๋ฌธ์ œ๋ฅผ ์ž‘์€ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆ„๋Š” ๊ธฐ๋ฒ•์€ 'ํ€ต ์ •๋ ฌ'๋„ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ํ€ต ์ •๋ ฌ์€ ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ๋‹ค๋ฅด๊ฒŒ ํ•œ๋ฒˆ ์ฒ˜๋ฆฌํ•œ ๊ฐ’์„ ๋‹ค์‹œ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋ฐ˜๋ฉด์— ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ํ•œ๋ฒˆ ์ฒ˜๋ฆฌํ–ˆ๋˜ ๊ฒƒ์„ ์บ์‹ฑํ•ด์„œ ๊ฐ€์ ธ์˜ค๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฌํ•œ ์ ์ด ์ฐจ์ด์ ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

์œ„์˜ ๋ฐฉ๋ฒ•์€ 'ํƒ‘๋‹ค์šด ๋ฐฉ์‹'์ด๋‹ค. ํฐ ๋ฌธ์ œ ํ•ด๊ฒฐ์„ ์œ„ํ•ด ์ž‘์€ ๋ฌธ์ œ๋ถ€ํ„ฐ ์ฐจ๊ทผ์ฐจ๊ทผ ๋‹ต์„ ๋„์ถœํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋ฐ˜๋ฉด์— ์ž‘์€ ๋ฌธ์ œ๋ถ€ํ„ฐ ํฐ ๋ฌธ์ œ๋กœ ํ–ฅํ•˜๋Š” ๋ฐฉ์‹์„ '๋ณดํ…€์—… ๋ฐฉ์‹'์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

๋ณดํ…€์—… ๋ฐฉ์‹์„ ์ด์šฉํ•œ ์†Œ์Šค ์ฝ”๋“œ

d = [0]*100

d[1] = 1
d[2] = 1

n=99

for i in range(3, n+1):
  d[i] = d[i-1]+d[i-2]
  

print(d[n])

 

๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์ „ํ˜•์ ์ธ๋ฐฉ์‹์€ ๋ณดํ†ฐ์—… ๋ฐฉ์‹์ด๋‹ค. 

 

๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋…ธํ•˜์šฐ

- ํŠน์ •ํ•œ ๋ฌธ์ œ๋ฅผ ์™„์ „ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์ ‘๊ทผํ–ˆ์„ ๋•Œ ์‹œ๊ฐ„์ด ๋งค์šฐ ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค๋ฉด ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ ํ•ด๊ฒฐ ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธ

-์›ฌ๋งŒํ•˜๋ฉด ๋ณดํ…€์—…๋ฐฉ์‹์œผ๋กœ