Link : judge.koreatech.ac.kr/problem.php?id=1055
1. 문제
- 3 * N 의 판이 있습니다. 이 판을 1 * 1 짜리 블럭과 2 * 2 블럭들을 이용해서 빈틈없이 채우려고 합니다.
길이 N이 주어 졌을 때, 몇 가지 방법으로 채울 수 있는지 구해 주세요.
2. 문제의 조건
- 1 <= T <= 10
- 1 <= N <= 100
- 1,000,000,007로 나눈 나머지를 출력
더보기
3. 문제 접근
- 시간 복잡도
1초 이내의 시간에 총 1000개를 푸는 문제라서 O(N^2.66)시간 이내에 풀면 됩니다!
- 아이디어
전형적인 dp문제 입니다.
3*N의 판에선 총 2개만 고려하시면 됩니다.
n이 길이가 1인 경우
또한, n이 길이가 2인 경우
이를 점화식으로 세우면 d(n-1) + 2*(n-2)가 됩니다.
※ n-3부턴 n-1와 n-2의 조합으로 만들 수 있으니 점화식에 계산(추가)하지 않습니다.
dp와 메모이제이션을 이용한 점화식이므로 시간 복잡도는 O(N)이 되어 충분히 풀 수 있습니다.
4. 풀이 방법
- dp를 수행 할 배열을 n + 1개만큼 만들어줍니다.
- 3 * 1(n)일 땐 경우의 수가 1이고, 3 * 2(n)일땐 경우의 수가 총 3가지이므로
dp[1] = 1이되고 dp[2] = 3이 됩니다. - 1과 2를 구했으니 3부터 n+1번째 까지 점화식을 수행합니다.
- dp[n]번쨰를 구해줍니다.
5. 소스코드
cjw.git@gmail.com
'알고리즘 > koreatech' 카테고리의 다른 글
1057: 걸기 쉬운 전화번호 (0) | 2020.12.11 |
---|---|
1056: 화장실 타일 채우기 (0) | 2020.12.11 |
1047: 몇 가지 음악을 듣고 있을까 (0) | 2020.12.11 |
1035: 최소 이동거리 (0) | 2020.12.11 |
1030: 한번 주식 거래하기 (0) | 2020.12.10 |
댓글