1. 문제설명
n이 주어졌을 때, n번째 피보나치 수를 구하는 문제이다.
- 시간 제한: 1초
- 메모리 제한: 256MB
2. 접근 방식
- 재귀 방법을 사용한다.
- 피보나치 메서드
- 합을 구한 두 개의 값을 매개변수로 받는다.
- 두 개의 합을 구하고 저장한 뒤, 구한 합과 두 번째 매개 변수로 재귀 호출한다.
- n번째 피보나치 수를 구한 경우 종료한다.
- 단, n이 0이면 0을 출력, 1이면 1을 출력한다.
그 외의 숫자는 피보나치 메서드를 호출한다.
3. 올바른 접근 방식 및 해결 방식
- 재귀 방법을 사용해 피보나치 수를 구한다.
- n이 0과 1일 경우는 fibonacci 메서드를 호출하면 에러가 발생하기 때문에 따로 체크해주어야 한다.
4. 최종 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class BJ_10870 {
static int n;
static int count = 1; // 순서 1부터 시작
static int result = 0; // 피보나치 수 저장
static void fibonacci(int a, int b) {
if(count == n) { // 현재 순서가 n번째 이면
System.out.println(result); // 현재 피보나치 수 출력
return; // 종료
}
result = a + b; // 두 매개변수 값을 더하고 저장
count++; // 현재 순서 갱신
fibonacci(b, result); // 메서드 재귀 호출
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
if(n==0) System.out.println(0); // n이 0이면 0을 출력
else if(n==1) System.out.println(1); // n이 1이면 1을 출력
else fibonacci(0, 1); // n이 2이상이면 fibonacci 메서드 호출
}
}
5. 시간복잡도
$O(n)$
반응형
'알고리즘 문제 > 백준' 카테고리의 다른 글
[백준] 4779번: 칸토어 집합 (Java) (0) | 2024.08.06 |
---|---|
[백준] 25501번: 재귀의 귀재 (Java) (0) | 2024.08.05 |
[백준] 1890번: 점프 (Java) (0) | 2024.08.03 |
[백준] 1495번: 기타리스트 (Java) (0) | 2024.08.02 |
[백준] 1654번: 랜선 자르기 (Java) (0) | 2024.07.31 |
댓글