Notice
Recent Posts
Recent Comments
Link
«   2026/06   »
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
Archives
Today
Total
관리 메뉴

dh-winternagi 님의 블로그

(1904) 01타일 본문

백준 (C++)/Solve

(1904) 01타일

dh-winternagi 2026. 4. 17. 17:46

https://www.acmicpc.net/problem/1904

단계별로 풀어보기

21단계(동적 계획법 1) 3번째

 

 

 

dp[n]을 길이가 n인 만들 수 있는 수열의 개수라고 하자. 이때 n번째 수는 당연히 0 또는 1이다.

1) n번째 수가 1: 나머지 n-1개를 아무렇게나 채워도 된다. 이는 길이가 n-1인 수열의 개수와 같으므로 dp[n-1]

2) n번째 수가 0: 00타일만 쓸 수 있으므로 n-1번째 수도 0이다. 길이가 n-2인 수열의 개수와 같으므로 dp[n-2]

따라서 dp[n]= dp[n-1]+dp[n-2]이다.

또한 dp[1]= 1, dp[2]= 2이다. 문제에서 알려주긴 하지만 보통 점화식 범위를 벗어나는 기저값은 따로 구해줄 필요가 있다.

 

 

 

#include <iostream>
#include <vector>
using namespace std;
#define p 15746

int main() 
{
  int n;
  
  cin >> n;
  
  vector<int> dp(n+1);
  
  dp[1]= 1;  dp[2]= 2;
  
  for(int i=3;i<=n;i++)  dp[i]= (dp[i-2]+dp[i-1])%p;
  
  cout << dp[n];
  
  return 0;
}

'백준 (C++) > Solve' 카테고리의 다른 글

(1912) 연속합  (0) 2026.04.17
(9461) 파도반 수열  (0) 2026.04.17
(9184) 신나는 함수 실행  (0) 2026.04.17
(24416) 알고리즘 수업 - 피보나치 수 1  (0) 2026.04.17
(14889) 스타트와 링크  (0) 2026.04.17