틀린 이유는 자료형 때문이었다.
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);
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준 30804번] 탕탕후루후루탕탕후루루루 (3) | 2024.12.06 |
---|---|
[백준 2579] 계단 오르기 (4) | 2024.11.29 |
[백준 1620] 나는야 포켓몬 마스터 이다솜(Java) (6) | 2024.11.14 |
[백준 1764번] ConcurrentModificationException >> retainAll() (4) | 2024.11.07 |
HashSet (0) | 2024.11.07 |