계단을 오르듯이

백준[JAVA] 1003. 피보나치함수 본문

알고리즘/백준_JAVA

백준[JAVA] 1003. 피보나치함수

happyAyun 2022. 2. 24. 08:54

피보나치에서 다이나믹 프로그래밍으로 발전된 문제이다.

arr[n][2]의 저장소와 방문처리 boolean형 1차원 배열을 이용해 풀이했다.

arr[n][0]= n일 경우 0의 개수, arr[n][1]= n일 경우 1의 개수이다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package algo;
 
import java.io.BufferedReader;
import java.io.InputStreamReader;
 
public class B_1003_피보나치함수 {
 
    static int[][] f = new int[41][2];
    static boolean[] visited = new boolean[41];
 
    public static void main(String[] args) throws Exception {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        f[0][0= f[1][1= 1;
        f[0][1= f[1][0= 0;
        visited[0= visited[1= true;
        int T = Integer.parseInt(in.readLine());
        for (int i = 0; i < T; i++) {
            int n = Integer.parseInt(in.readLine());
            int[] result = fibo(n);
            sb.append(result[0+ " " + result[1+ "\n");
        }
        System.out.println(sb);
    }
 
    private static int[] fibo(int n) {
        int[] answer = new int[2];
        if (n == 0 || n == 1) {
            answer[0= f[n][0];
            answer[1= f[n][1];
            return answer;
        } else if (!visited[n]) { // 방문하지 않았을 때 - 배열에 값이 저장되지 않았을 경우
            visited[n] = true;
            int[] a = fibo(n - 1);
            int[] b = fibo(n - 2);
            f[n][0= a[0+ b[0];
            f[n][1= a[1+ b[1];
            answer[0= f[n][0];
            answer[1= f[n][1];
            return answer;
        } else { // 이미 해당 수의 계산이 끝나고 배열에 저장된 경우
            answer[0= f[n][0];
            answer[1= f[n][1];
            return answer;
        }
    }
}
 
cs

'알고리즘 > 백준_JAVA' 카테고리의 다른 글

백준 [JAVA] 2108. 통계학  (0) 2022.03.03
백준 [JAVA] 2167. 2차원 배열의 합  (0) 2022.03.01
백준 [JAVA] 5430. AC  (0) 2022.02.23
[JAVA] 11403. 경로 찾기  (0) 2022.02.06
[JAVA] 2638. 치즈  (0) 2022.02.06