코딩/코딩테스트
백준 11726번: 2xn 타일링
yesman9
2024. 4. 29. 19:02
뭔가 9번째 항을 만드는 데, 이 전의 항들을 이용해서 만들 수 있을 것 같다.
DP로 접근해본다.
dp[4]까지 했더니 뭔가 규칙이 보인다.
dp[n] = dp[n-1] + dp[n-2]
근데 이게 진짜일까..?
예제에서 9번째 항은 55라고 했으니 위 규칙을 적용했을 때 dp[9] = 55인지 확인해보면 된다.
dp배열을 계속해서 채워보자면...
dp[5] = 8
dp[6] = 13
dp[7] = 21
dp[8] = 34
dp[9] = 55
규칙이 성립한다.
이를 토대로 코드를 짜보면 아래와 같다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
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());
// ArrayIndexOutOfBoundsException 방지
if(n == 1) {
System.out.println(1);
return;
}
// 입력받은 크기만큼 DP 배열 생성
long dp[] = new long[n + 1];
dp[0] = 0;
dp[1] = 1;
dp[2] = 2;
for (int i = 3; i <= n; i++) {
dp[i] = (dp[i - 1] + dp[i - 2]) % 10007;
}
// 출력
bw.write(String.valueOf(dp[n]));
bw.flush();
bw.close();
}
}