본문 바로가기
IT

넷플릭스 '더 에이트 쇼'로 배우는 자바스크립트 피보나치 수열 구현하기

by 굿센스굿 2025. 7. 25.
반응형

 

🐇 피보나치 수열이란?

먼저, 피보나치 수열(Fibonacci Sequence)은 수학에서 매우 유명한 수열입니다.

수열의 규칙은 간단합니다.

처음 두 항은 1, 이후 항은 앞 두 항의 합

공식으로 표현하면 다음과 같습니다.

f(1) = 1  
f(2) = 1  
f(n) = f(n-1) + f(n-2)   (n > 2)

즉, 다음과 같은 순서로 전개됩니다:

1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ...

각 항은 앞의 두 항을 더한 값이죠.


🐰 토끼 번식 문제로 이해하는 피보나치

피보나치 수열은 고대 수학자 **레오나르도 피보나치(Leonardo Fibonacci)**가
토끼의 번식을 모델링하기 위해 고안한 것으로 알려져 있습니다.

이해를 돕기 위해, 토끼 번식 문제를 간단히 설명드릴게요.

  1. 처음에는 한 쌍의 어린 토끼가 있습니다.
  2. 이 토끼는 2개월부터 새끼를 낳을 수 있습니다.
  3. 새끼 토끼도 2개월 후부터 번식이 가능합니다.
  4. 매달 한 쌍의 새끼를 낳습니다.

이 번식 과정을 월별로 정리하면 자연스럽게 피보나치 수열이 형성됩니다.

월 번식 가능한 토끼 쌍 총 토끼 쌍 수

1 0 1
2 0 1
3 1 2
4 1 3
5 2 5
6 3 8
7 5 13
8 8 21

이처럼 자연스러운 증가가 피보나치 수열의 핵심입니다.


🎬 드라마 '더 에이트 쇼' 속 피보나치 수열

이제 다시 'The 8 Show'로 돌아가 보겠습니다.

이 드라마에서는 층마다 1분당 적립되는 금액이 피보나치 수열로 설정되어 있었습니다.

층수 분당 적립금 (만 원) 피보나치 수열 값

1층 1만 원 1
2층 1만 원 1
3층 2만 원 2
4층 3만 원 3
5층 5만 원 5
6층 8만 원 8
7층 13만 원 13
8층 21만 원 21

하지만 이 수열을 9번째 항까지 확장하면 34라는 값이 나옵니다.

console.log(fibo(9)) // 34

즉, 9층이 있었다면 분당 34만 원이 적립되었겠죠.


💻 자바스크립트로 피보나치 수열 구현하기

1. 재귀 함수(Recursive Function) 방식

가장 기본적인 구현은 재귀 방식입니다.

function fibo(n) {
	if (n <= 2) {
		return 1;
	} else {
		return fibo(n - 1) + fibo(n - 2);
	}
}

console.log(fibo(9)); // 34

📌 장점

  • 코드가 간결하고 수학적 정의를 그대로 표현

📌 단점

  • 중복 계산이 너무 많아져 성능이 매우 떨어짐
  • 예를 들어 fibo(40) 같은 큰 값을 구할 경우 수천만 번의 호출이 발생

2. 반복문(Loop) 방식

좀 더 효율적인 방식은 반복문을 사용하는 것입니다.

function fiboLoop(n) {
	let a = 0;
	let b = 1;
	let res = 1;

	for (let i = 1; i < n; i++) {
		res = a + b;
		a = b;
		b = res;
	}

	return res;
}

console.log(fiboLoop(9)); // 34

📌 장점

  • 반복문을 활용하여 **시간 복잡도 O(n)**으로 최적화됨
  • n이 1000이 넘어도 빠르게 처리 가능

📌 단점

  • 피보나치 수열 정의에 비해 직관성이 떨어질 수 있음

3. 메모이제이션(Memoization) 방식

재귀의 직관성과 반복문의 성능을 둘 다 잡는 방법이 있습니다.
바로 메모이제이션 기법입니다.

const fiboMemo = (function () {
	const cache = {};
	return function fib(n) {
		if (n <= 2) return 1;
		if (cache[n]) return cache[n];
		cache[n] = fib(n - 1) + fib(n - 2);
		return cache[n];
	};
})();

console.log(fiboMemo(9)); // 34

📌 장점

  • 반복 계산을 줄이면서도 재귀 구조를 유지
  • 시간 복잡도 O(n)

✨ 피보나치 수열은 어디에 쓰일까?

피보나치 수열은 단순한 수학 장난이 아닙니다.
수많은 분야에 실제 활용되고 있습니다.

✔️ 예술 및 건축

  • **황금비율(Golden Ratio)**을 기반으로 건축 설계에 활용
  • 파르테논 신전, 미켈란젤로의 작품에 적용

✔️ 디자인

  • 웹/앱 디자인 시 비율 설정에 자주 사용
  • 로고 및 레이아웃 구성 시 안정적인 시각 효과 제공

✔️ 금융

  • 엘리어트 파동 이론 등 주식시장 기술분석에서 사용

✔️ 알고리즘 인터뷰

  • 프로그래밍 면접 단골 문제로 자주 출제

🧠 마무리: 수학과 코딩, 그리고 이야기의 연결

넷플릭스의 드라마 속 설정 하나가 이렇게 수학과 연결되고,
다시 그것이 코드로 구현되며
현실의 다양한 분야에 연결된다는 사실이 무척 흥미롭지 않나요?

피보나치 수열은 단순히 숫자의 나열이 아니라,
우리 삶의 자연스러운 패턴구조를 반영한 수학적 예술입니다.

자바스크립트를 배우는 여러분이라면 꼭 한 번은
이 수열을 다양한 방식으로 구현해보며
알고리즘과 시간 복잡도, 코드 구조를 이해해보시길 추천드립니다.


📌 오늘 정리한 코드 3종 요약:

// 1. 재귀 방식
function fibo(n) {
	if(n <= 2) return 1;
	return fibo(n - 1) + fibo(n - 2);
}

// 2. 반복문 방식
function fiboLoop(n) {
	let a = 0, b = 1, res = 1;
	for (let i = 1; i < n; i++) {
		res = a + b;
		a = b;
		b = res;
	}
	return res;
}

// 3. 메모이제이션 방식
const fiboMemo = (function () {
	const cache = {};
	return function fib(n) {
		if (n <= 2) return 1;
		if (cache[n]) return cache[n];
		cache[n] = fib(n - 1) + fib(n - 2);
		return cache[n];
	};
})();

📎 참고로, 드라마 속 설정처럼 피보나치 수열을 활용해
적립금 계산기게임 보상 알고리즘 등을 설계하면
게임성과 몰입도를 훨씬 높일 수 있습니다.

앞으로도 드라마, 영화 속 흥미로운 개념을
프로그래밍 언어로 구현해보는 포스팅을 계속해서 이어갈게요! 😊

감사합니다.

 

반응형