1. 문제 링크
2. 문제 및 입출력예제
3. 문제 풀이
앞서 올린 2xn 타일링을 응용한 예제이다.
2xN 타일링 문제와 시작은 똑같다.
대신 2x2 타일이 새로 생겨서 그 경우의 수를 알아야 한다.
그려 보니까 2개 이상 차이가 나는 경우에 2x2 타일을 추가할 수 있었다.
즉, a[i] = a[i-1] + a[i-2]*2라는 점화식이 나온다.
4. 코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws Exception {
StringBuilder sb = new StringBuilder();
int[] arr;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
arr = new int[N];
arr[0] = 1;
if (N>1) {
arr[1] = 3;
}
if(N>2) {
arr[2] = 5;
}
for (int i=3; i<N; i++) {
arr[i] = (arr[i-1] + 2*arr[i-2]) % 10007;
}
System.out.println(arr[N-1]);
}
}
'ALGORITHM' 카테고리의 다른 글
백준 10972 다음 순열 (Java) (0) | 2023.02.18 |
---|---|
백준 9655 돌 게임 (Java) (0) | 2023.02.17 |
백준 11726 2xN 타일링 (Java) (0) | 2023.02.15 |
백준 2164 카드2 (Java) (0) | 2023.02.14 |
백준 7576 토마토 (Java) (0) | 2023.02.13 |