int형의 범위는 2,147,483,647이다. 즉 21억이 int형의 한계가 되겠다!
import java.io.*;
import java.util.*;
public class Main{
static long arr[] = new long[101];
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
wave();
int N = Integer.parseInt(br.readLine());
for(int i=0; i<N; i++){
int tmp = Integer.parseInt(br.readLine());
sb.append(arr[tmp]).append('\n');
}
System.out.println(sb);
}
public static void wave(){
arr[1] = 1;
arr[2] = 1;
arr[3] = 1;
for (int i = 4; i < 101; i++) {
arr[i] = arr[i-2]+arr[i-3];
}
}
}
재귀를 활용하는 방법도 있다.
import java.io.*;
import java.util.*;
public class Main{
static long arr[] = new long[101];
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
arr[0] = 0;
arr[1] = 1;
arr[2] = 1;
arr[3] = 1;
int N = Integer.parseInt(br.readLine());
for(int i=0; i<N; i++){
int tmp = Integer.parseInt(br.readLine());
sb.append(wave(tmp)).append('\n');
}
System.out.println(sb);
}
public static long wave(int n){
if(arr[n] == 0){
arr[n] = wave(n-2)+wave(n-3);
}
return arr[n];
}
}
왠만하면 재귀보다는 배열을 활용하는 방법을 사용해서 풀게 된다.
import java.io.*;
public class Main{
static long[] arr = new long[101];
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
for(int i=0; i<n; i++){
int t = Integer.parseInt(br.readLine());
fn(t);
bw.write(arr[t] + "\n");
}
bw.flush();
}
public static void fn(int n){
arr[1] = 1;
arr[2] = 1;
arr[3] = 1;
for(int i=4; i<101; i++){
arr[i] = arr[i-2]+arr[i-3];
}
}
}