출처: https://bumcrush.tistory.com/182 [맑음때때로 여름]
https://www.acmicpc.net/problem/1904
1904번: 01타일
지원이에게 2진 수열을 가르쳐 주기 위해, 지원이 아버지는 그에게 타일들을 선물해주셨다. 그리고 이 각각의 타일들은 0 또는 1이 쓰여 있는 낱장의 타일들이다. 어느 날 짓궂은 동주가 지원이��
www.acmicpc.net
#include <iostream>
using namespace std;
const int MAX = 1000000;
const int MOD = 15746;
int N;
int dp[MAX];
void tiling()
{
dp[1] = 1;
dp[2] = 2;
for (int i = 3; i <= N; i++)
{
dp[i] = (dp[i - 1] + dp[i - 2]) % MOD;
}
cout << dp[N];
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cin >> N;
tiling();
}
실버 3의 난이도로 보기에는 상당히 쉬운 것 같다.
A4 용지에 하나하나 적다보면 점화식은 금방 도출된다. 조금 더 dp스럽게 생각해본다면 dp[i]에서 경우의 수는 dp[i-1]에 1을 붙이는 경우, dp[i-2]에 00을 붙이는 경우가 있다.
앞부분 뿐만 아니라 뒷부분에 붙이는 경우도 존재하기 때문에 전체의 2배를 해주어야 하지만 정확히 절반이 중복이다.(다른 블로그를 보니 따라서 N-2에선 맨 뒤에 00만 붙이고, N-1에선 맨 앞에 1만 붙이면 중복 없이 값을 구할 수 있다고 한다.)
다시 시작한지 1주일 밖에 안됐는데 내 자신이 너무 조급해하는 것 같다는 느낌이 든다. 조급한 마음은 원동력이 될 수도 장애물이 될 수도 있다. 천천히.... 조금은 마음을 천천히 가질 필요가 있다. 많은 문제를 풀려고 욕심부리지 말고 푼 문제들을 확실히 이해하는데 집중하자.
백준 1965 상자넣기(dynamic programming) (0) | 2020.07.09 |
---|---|
백준 6359 만취한 상범(dynamic programming) (0) | 2020.07.08 |
백준 1890 점프(dynamic programming) (0) | 2020.07.07 |
백준 11051 이항 계수2(dynamic programming) (0) | 2020.07.07 |
백준 11722 가장 긴 감소하는 부분수열(dynamic programming) (0) | 2020.07.07 |
댓글 영역