반응형
문제 링크 : 백준 11726 2xn 타일링
문제
2xn 크기의 직사각형을 1x2, 2x1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오.
- 예시
- 입력 : 2 / 출력 : 2
- 입력 : 9 / 출력 : 55
풀이
Bottom-up 방식의 DP. 규칙을 찾고 점화식을 세워 해결하는 방식이다. 그림을 그려보며 규칙을 찾아낸다. cache 배열에 3번째 인덱스까지의 값을 초기화 해준다. 내가 살짝 헤맸던 부분은 cache[i] 번째에 일단 i-1 번째 인덱스와 i-2번째 인덱스를 더해주고 나중에 답을 구할 때 10007 modulo 계산을 해주어 출력을 한 부분이 왜 오답인지 몰랐어서 헤맸다. 다시 생각해보니 반복문 안에서 modulo 연산을 해주지 않으면 이전 값이 전부 틀려버리기 때문에 반복문 안에서 연산을 해주며 i번째에 넣어주어야 하는게 맞다.
코드
#include <iostream>
#include <algorithm>
using namespace std;
int cache[1000];
int main() {
cout << "start" << endl;
int n;
cin >> n;
cache[1] = 1;
cache[2] = 2;
cache[3] = 3;
for(int i = 4; i <= n; i++) {
cache[i] = (cache[i-1] + cache[i-2]) % 10007;
}
cout << cache[n] << endl;
return 0;
}
반응형
'알고리즘 > 알고리즘 문제 풀이' 카테고리의 다른 글
[프로그래머스] 완주하지 못한 선수 Python (0) | 2020.03.16 |
---|---|
[백준 10844] 쉬운 계단 수 C++ (0) | 2020.01.19 |
[백준 9095] 1, 2, 3 더하기 C++ (0) | 2020.01.15 |
[백준 11727] 2xn 타일링 2 c++ (0) | 2020.01.14 |
[백준 1463] 1로 만들기 C++ (0) | 2020.01.05 |