본문 바로가기

코딩테스트

[백준 10870번] 피보나치 수 5

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