일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 다이나믹프로그래밍
- Effective Java
- 이펙티브자바
- 백준
- DFS
- DP
- Database
- 우선순위큐
- mariaDB
- Spring
- 알고리즘
- 정렬
- 피보나치
- 탐욕법
- 데이터베이스
- db
- 깊이우선탐색
- 코테
- 프로그래머스
- Greedy
- springboot
- mybatis
- SQL
- BFS
- 그리디알고리즘
- java
- select
- IntelliJ
- join
- 너비우선탐색
Archives
- Today
- Total
땀두 블로그
[백준] 11727번 - 2*n 타일링 2 본문

예전에 풀었던 2*n 타일링과 비슷한 문제이다.
이 문제 역시 그림을 그려서 점화식을 유추해보았다.

사진 설명을 입력하세요.
파란색으로 표시한 것을 보면 2개로 만들어진 타일에서 한 개씩 추가한 것을 알 수 있고, 빨간색으로 표시한 것을 보면 1개로 만들어진 타일에서 2개로 만들어질 수 있는 것 중 겹치는 것을 제외한 2개가 추가된 것을 알 수 있다. 이것을 통해서 아래와 같은 점화식을 세울 수 있다.
$f(N)=f(N-1)+f(N-2)*2$f(N)=f(N−1)+f(N−2)*2
이 식을 통해서 dp로 코드를 작성하면 된다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class p11727 {
public static long[] ary;
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int a = Integer.parseInt(br.readLine());
ary = new long[a + 1];
ary[1] = 1;
if (a >= 2) {
ary[2] = 3;
}
System.out.println(dp(a));
}
public static long dp(int a) {
if (ary[a] == 0) {
ary[a] = (dp(a - 1) + 2 * dp(a - 2)) % 10007;
}
return ary[a];
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 2178번 - 미로 탐색 (0) | 2022.03.22 |
---|---|
[백준] 11659번 - 구간 합 구하기 4 (0) | 2022.03.22 |
[백준] 1080번 - 행렬 (0) | 2022.03.22 |
[백준] 1780번 - 종이의 수 (0) | 2022.03.22 |
[백준] 1541번 - 잃어버린 괄호 (0) | 2022.03.22 |
Comments