Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 삼성역량테스트
- DP문제
- sort
- 초소형머신러닝
- 자료구조
- 코테 문제
- 그리디
- 코딩테스트
- 포스코 AI교육
- 임베디드 딥러닝
- 딥러닝
- 컴퓨팅사고
- tflite
- 영상처리
- BFS
- 포스코 교육
- 알고리즘
- dfs문제
- 삼성코딩테스트
- TensorFlow Lite
- 코테
- dfs
- 다이나믹프로그래밍
- bfs문제
- MCU 딥러닝
- DP
- 삼성역테
- 포스코 ai 교육
- 삼성코테
- tinyml
Archives
- Today
- Total
코딩뚠뚠
[백준문제풀이] 2133 타일 채우기 본문
반응형
풀이일시 : 2020-08-09
문제 :
3×N 크기의 벽을 2×1, 1×2 크기의 타일로 채우는 경우의 수를 구해보자.
입력 :
첫째 줄에 N(1 ≤ N ≤ 30)이 주어진다.
출력 :
첫째 줄에 경우의 수를 출력한다.
풀이 :
가장 마지막에 오는 타일을 생각했을 때 나타나는 경우의 수는 세 가지이다. (그 이전 갯수는 N-2개)
또한 4개이상일 때부터 2의 배수가 될때마다는 고유한 모양이 2개씩 나타난다.
D[i] = 3*D[i-2] + (2*D[i-4] + 2*D[i-6] + 2*D[i-8] + .... + 2*D[0])
아래는 DP에 대한 포스팅이다. 이의 알고리즘으로 풀이했다.
dbstndi6316.tistory.com/35?category=953970
#include <iostream>
using namespace std;
int d[1001];
int dp(int x) {
if (x == 0) return 1; //못채우는경우
if (x == 1) return 0; //채울 수 있는 타일이 없다.
if (x == 2) return 3; //2일때는 3가지 경우의 수
if (d[x] != 0) return d[x];
int result = 3 * dp(x - 2); //점화식 분할 part.1
for (int i = 3; i <= x; i++) { //4개일때부터 짝수개에는 경우가 두가지씩 더들어간다
if (i % 2 == 0) //짝수개 조건에만
result += 2 * dp(x - i); //점화식 분할 part.2
}
return d[x] = result; //result를 return 해준다.
}
int main() {
int x;
cin >> x;
printf("%d", dp(x));
}
반응형
'알고리즘 문제풀이 > 백준문제풀이' 카테고리의 다른 글
[백준문제풀이] 2252 줄 세우기 (0) | 2020.12.29 |
---|---|
[백준문제풀이] 15852 타일 채우기 3 (0) | 2020.12.29 |
[백준문제풀이] 11727 2xn 타일링 2 (0) | 2020.12.29 |
[백준문제풀이] 11726 2xn 타일링 (0) | 2020.12.29 |
[백준문제풀이] 10989 수 정렬하기 3 (0) | 2020.12.29 |