문제링크: https://www.acmicpc.net/problem/11727
1. 코드
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(0); cin.tie(0);
int n;
cin >> n;
vector<int> d(n+1, 0);
d[1] = 1;
d[2] = 3;
for (int i = 3; i <= n; i++) {
d[i] = (d[i-1] + 2*d[i-2]) % 10007;
}
cout << d[n];
}
2. 시간복잡도
n = 1000이므로 dp를 이용해서 푼다면 시간제한 1초 내에 통과 가능하다. dp 테이블을 채우는데 O(n)이고, n = 1000 < 10^8이므로 시간제한 1초 내에 통과 가능하다.
3. 분석
[boj_11726.cpp] 2×n 타일링 (다이나믹 프로그래밍)
문제링크: https://www.acmicpc.net/problem/11726 1. 코드#include using namespace std;int main() { ios::sync_with_stdio(0); cin.tie(0); int n; cin >> n; vector d(n+1); d[1] = 1; d[2] = 2; for (int i = 3; i 2. 분석1. dp 테이블 정의:d[i] = i번째
sophon.tistory.com
다이나믹 프로그래밍 문제이다. 위 문제와 매우 유사하다.
1. dp 테이블 정의:
i번째 칸을 채울 수 있는 방법의 수
2. 점화식:
(1) i번째에 2x1 사각형을 채우는 경우: d[i-1]
(2) i, i-1에 걸쳐 2x1 또는 2x2를 채우는 경우: d[i-1] x 2가지(2x1, 2x2)
따라서 d[i] = d[i-1] + 2*d[i-2] 이다.
'코딩테스트 > BOJ' 카테고리의 다른 글
| [BOJ / C++] 숫자 카드 (이분탐색) (0) | 2025.07.28 |
|---|---|
| [BOJ / C++] 랜선 자르기 (이분탐색, Parametric Search) (0) | 2025.07.28 |
| [BOJ / C++] 세 수의 합 (이분탐색) (0) | 2025.07.27 |
| [BOJ / C++] 좌표 압축 (이분탐색) (0) | 2025.07.26 |
| [BOJ / C++] 숫자 카드 2 (이분탐색) (0) | 2025.07.26 |