문제 해석
이 문제는 전 POST 였던 01타일문제와 매우 유사한 문제이다.
식이 조금 다른데, 그 외에는 거의 동일하다고 볼 수 있다. 이에 대한 설명은 아래와 같다.
일단 테스트의 개수 T를 입력받고 T만큼 P(N : T개마다 주어지는 숫자)을 구하면 되는 문제인데, 피보나치수와 좀 다르게 흘러가는 점은 값을 구하는 인덱스가 전이 아닌 전전 인덱스라는 것이다.
그림으로 설명하면 아래와 같다.
위와 같이 P(N) = P(N-2) + P(N-3) 값인 것을 확인할 수 있다.
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
static int[] fib = new int[101];
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
/*초기 값 설정*/
fib[0] = 0;
fib[1] = 1;
fib[2] = 1;
fib[3] = 1;
for(int i = 4; i < fib.length; i++) {
fib[i] = -1;
}
while(T --> 0){
int N = Integer.parseInt(br.readLine());
sb.append(P(N)).append("\n");
}
System.out.println(sb);
br.close();
}
static int P(int N){
if(fib[N] == -1){
fib[N] = P(N-2) + P(N-3);
}
return fib[N];
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
static Long[] fib = new Long[101];
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
/*초기 값 설정*/
fib[0] = 0L;
fib[1] = 1L;
fib[2] = 1L;
fib[3] = 1L;
while(T --> 0){
int N = Integer.parseInt(br.readLine());
sb.append(P(N)).append("\n");
}
System.out.println(sb);
br.close();
}
static Long P(int N){
/*Long은 Wrapper Class으로 값의 초기값이 null이기 때문에 초기화를 -1로 잡아줄 필요가 없다.*/
if(fib[N] == null){
fib[N] = P(N-2) + P(N-3);
}
return fib[N];
}
}
결과
느낀 점