
난이도: ★☆☆☆☆ • solved on: 2025-11-21

문제 유형: 재귀(Recursion), 수학, DP 기초
요구사항:
정수 n이 주어질 때, n번째 피보나치 수(F(n))를 계산한다.
정의:
자료구조
알고리즘/기법
핵심 키워드
- 문제 분해
- F(0), F(1)은 값이 고정되어 있으므로 즉시 반환한다.
- 나머지 n은 점화식
F(n) = F(n−1) + F(n−2)로 계산한다.
핵심 로직 흐름
if n == 0 → return 0 if n == 1 → return 1 return fibonacci(n-1) + fibonacci(n-2)예외 처리
- 입력이 0 또는 1인 경우 즉시 반환하므로 문제가 없음.
public class Solution {
public static int fibonacci(int n) {
// Complete the function.
if(n==0){
return 0;
}
if(n==1){
return 1;
}
return fibonacci(n-1) + fibonacci(n-2);
}
}
재귀 풀이가 직관적이지만 비효율적이다.
같은 문제를 여러 번 호출하기 때문이다.
효율성을 높이려면 다음 두 가지 방식 중 하나를 사용하는 것이 일반적이다.
Recursion을 대체하는 대표적인 로직
1. Iteration (반복문 방식, Bottom-Up DP)
가장 효율적이며 실무에서 가장 많이 사용한다.
아이디어
- 배열이나 변수 두 개만 사용해
F(0) → F(1) → F(2) … → F(n)순서로 쌓아 올린다.
- 재귀 호출이 없기 때문에 스택 오버플로우 걱정이 없다.
특징
- 시간 복잡도: O(n)
- 공간 복잡도: O(1) (변수 2개)
- 가장 빠르고 메모리 효율적
2. Memoization (Top-Down DP, 재귀 + 캐싱)
재귀 기반이지만 중복 계산을 제거하여 매우 빠르게 만든다.
아이디어
fibonacci(n)호출 시이미 계산한 값은 배열이나 해시맵에 저장해두고
다시 호출되면 저장된 값을 바로 반환한다.
특징
- 시간 복잡도: O(n)
- 공간 복잡도: O(n) (메모 배열 + 재귀 스택)
- 재귀 구조를 유지하면서 속도만 개선하고 싶을 때 좋음
비슷한 유형 (GPT 추천):
확장 문제 (GPT 추천):