https://www.acmicpc.net/problem/10870
10870번: 피보나치 수 5
피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가
www.acmicpc.net
1. 어떤 문제로 이해 했는가? 그리고 문제의 제약 조건은?
n번째 피보나치 수열을 구하는 프로그램
0<=n<=20인 정수이다.
2. 나의 방식대로 문제를 재정의 하자.
평범한 피보나치 수열 리턴 문제이다.
n번째 피보나치 수열 값을 리턴한다.
3. 어떤 알고리즘과 자료구조를 사용할 것인가?
반복문과 재귀함수로 해결할 수 있다.
4. 어떻게 계산할 것인가?
1) 입력
BufferedReader를 사용하여 입력
2) 시간 복잡도 계산
O(n)
5. 주의할 점은 무엇인가?
6. 풀이 과정
import java.io.*;
public class q10870 {
static int[] memory;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
Integer N = Integer.parseInt(br.readLine());
if (N == 0) {
bw.write("0\n");
bw.flush();
br.close();
bw.close();
return;
}
memory = new int[N+1];
bw.write(fibo(N) + "\n");
bw.flush();
br.close();
bw.close();
}
static int fibo(int n) {
if (n == 0) {
memory[0] = 0;
return memory[n];
} else if (n == 1) {
memory[1] = 1;
return memory[n];
}
memory[n] = fibo(n-1) + fibo(n - 2);
return memory[n];
}
}
7. 개선점
'코딩테스트' 카테고리의 다른 글
[백준 16953번] A -> B (0) | 2021.07.10 |
---|---|
[백준 2579번] 계단 오르기 (0) | 2021.07.04 |
[백준 1149번] RGB거리 (0) | 2021.07.04 |
[백준 11726번] 2xn 타일링 (0) | 2021.07.02 |
[백준 1003번] 피보나치 수열 (0) | 2021.07.01 |