알고리즘/백준

[백준 9461] 파도반 수열

이채림 2024. 11. 29. 20:26

^^

 

틀린 이유는 자료형 때문이었다.

dp 배열을 Long으로 변경하니까 해결되었다.

 

int 범위는 약 -2,147,483,648 ~ 2,147,483,647 이다.

dp[i] = dp[i - 2] + dp[i - 3] 계산 과정에서 100번째 값까지 계산하면

피보나치와 비슷한 증가 속도 때문에 int 범위를 초과한다.

 

dp[100] = 18,446,744,073,709,551,615 (약 18경)

 

코드

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(br.readLine());

        // dp
        Long[] dp = new Long[101];
        dp[1] = 1L;
        dp[2] = 1L;
        dp[3] = 1L;

        for(int i=4; i<dp.length; i++){
            dp[i] = dp[i-2] + dp[i-3];
        }

        StringBuilder sb = new StringBuilder();
        for(int i=0; i<T; i++) {
            int n = Integer.parseInt(br.readLine());
            sb.append(dp[n]).append("\n");
        }

        System.out.print(sb);
    }
}