문제설명
2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 문제입니다.
작동 순서
1. 직사각형의 크기 n을 입력받습니다.
2. 계산을 해보면 2×n 크기의 직사각형을 채우는 방법의 수는 2×(n-1) 크기의 직사각형을 채우는 방법의 수+2×(n-2) 크기의 직사각형을 채우는 방법의 수와 같다는 것을 알 수 있습니다.
3. 각 n번째에 (n-1)의 값+(n-2)의 값을 넣어줍니다.
4. n번째 값을 출력합니다.
소스코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n=Integer.parseInt(br.readLine());
int[] dp=new int[1001];
dp[1]=1;
dp[2]=2;
for(int i=3;i<1001;i++) dp[i]=(dp[i-1]+dp[i-2])%10007;
System.out.print(dp[n]);
}
}
후기
굉장히 간단한 DP문제라서 쉽게 풀 수 있었습니다. 숫자로는 간단한 규칙이 나와서 풀 수 있었는데 막상 설명을 하려고 하니 쉽지 않네요. 문제를 푸는 것 뿐만 아니라 그 답에 대해서 좀 더 깊게 생각을 해봐야 할 것 같습니다.