#문제
11726번: 2×n 타일링
2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다.
www.acmicpc.net
#풀이 & 학습한 내용
마지막에 타일이 올수 있는 경우는 1개가 서있는것과, 2개가 가로로 누워있는 것이다. 각각의 경우는 n-1과 n-2일 때의 문제를 푸는 것과 동일하므로 dp를 이용하여 앞에서부터 순차적으로 n까지 dp배열을 채워나간다. 이때 dp의 basis case는 n=1일 때 1과 n=2일 때 2이다. 또한, 문제에서 무언가로 나눈 답을 구하란 것을 문제를 푸는 과정에서 나누면서 구하라는 뜻이다.
#소스코드
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#include<iostream>
#include<algorithm>
using namespace std;
int dp[1002];
int main(void) {
int N;
cin >> N;
dp[1] = 1; dp[2] = 2;
for (int i = 3; i <= N; i++) {
dp[i] = (dp[i - 1] + dp[i - 2]) % 10007;
}
cout << dp[N] << "\n";
}
|
cs |
github.com/HoYoungChun/BOJ_algorithm/blob/master/Dynamic_Programming/BOJ_11726.cpp
HoYoungChun/BOJ_algorithm
Baekjoon Online Judge problem solving by C++. Contribute to HoYoungChun/BOJ_algorithm development by creating an account on GitHub.
github.com
'Algorithm > Dynamic Programming' 카테고리의 다른 글
| [C++] 백준 9095번 : 1, 2, 3 더하기 (S3) (0) | 2020.11.05 |
|---|---|
| [C++] 백준 11727번 : 2×n 타일링 2(S3) (0) | 2020.11.05 |
| [C++] 백준 1463번 : 1로 만들기 (S3) (0) | 2020.11.05 |
| [C++] 백준 11048번 : 이동하기 (S1) (0) | 2020.10.18 |
| [C++] 백준 11049번 : 행렬 곱셈 순서 (G3) (0) | 2020.10.17 |