๐จ ๋ฌธ์
๋ฌธ์ ๋งํฌ: https://www.acmicpc.net/problem/1309
- ์๊ณ ๋ฆฌ์ฆ ๋ถ๋ฅ: ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ
- ๋์ด๋: Silver 1
๐ฌ ํ์ด
์ฒ์์๋ ์ํ ์กฐํฉ๋ฌธ์ ๋๋์ผ๋ก ์๊ฐํ๋ค๊ฐ, ๋ ธ๊ฐ๋ค๋ก ์ง์ N=1, N=2, N=3, ...์ผ๋ ๊ตฌํ๋ค๊ฐ DP ๋ฌธ์ ๋ผ๊ณ ์์ด ์๋ค.
์ฌ์ค ๋ด๊ฐ ํผ ๋ฐฉ๋ฒ์ N=1๋ถํฐ N=4๊น์ง ๋ ธ๊ฐ๋ค๋ก ์ง์ ๊ฐ์ ๊ตฌํ ๋ค์, ๊ทธ๋ฅ ๋ผ์๋ง์ถฐ์ ์ ํ์์ ๊ตฌํ๋ค.
ํ๋ง๋๋ก ์ผ๋งค๋ก ํ์๋ค๋ ๊ฒ,,,ใ ใ
์ฆ, ์ง์ dp[1]=3, dp[2]=7, dp[3]=17, dp[4]=41๊น์ง ๊ตฌํด๋์ ๋ค์์, 3,7,17,41,...์์ ์ด์ ํญ์ ์ด์ฉํด์ ์ซ์๋ฅผ ์ด๋ป๊ฒ ํ๋ฉด ๋์ฌ์ง ๊ปด๋ง์ถฐ ๋ณด๋ค๊ฐ ์ผ๋ฐํ๋ ์ dp[n] = 2*dp[n-1] + dp[n-2]๋ฅผ ๊ตฌํ ์ ์์๋ค.
๋๋ฌด ์ด๋นจ๋ก ๋ฌธ์ ๊ฐ ํ๋ ค๋ฒ๋ ค์ ์ ์ ํ์์ ๋ํ ํ์ด๋ฅผ ์ฐพ์๋ดค๊ณ , ๊ทธ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ๋ค.
์ฐ์ ํ ์ค์ ๋ฐฐ์นํ ์ ์๋ ๊ฒฝ์ฐ๋ (X,X), (๐ฆ,X), (X,๐ฆ) ์ด๋ ๊ฒ ์ด 3๊ฐ์ง๋ค.
์ด์ dp[n] : n๋ฒ์งธ ์ค๊น์ง ์ฌ์๋ฅผ ๋ฐฐ์นํ๋ ์ด ๊ฒฝ์ฐ์ ์ ๋ฅผ ๊ตฌํด๋ณด์
- ์ด๋ ๋ง์ฝ n๋ฒ์งธ ์ค์ ์ฌ์๋ฅผ ๋ฐฐ์นํ์ง ์๋๋ค๋ฉด, dp[n-1]๊ฐ์ง๋ค.
- ๋ ๋ง์ฝ n๋ฒ์งธ ์ค ์ผ์ชฝ์ ์ฌ์๋ฅผ ๋ฐฐ์นํ๋ค๋ฉด, (n-1)๋ฒ์งธ ์ค์ ์ฌ์๋ฅผ ์ค๋ฅธ์ชฝ์ ๋ฐฐ์นํ๊ฑฐ๋ ์์ ์ ํ ์ ์๋ค.
- ๋ ๋ง์ฝ n๋ฒ์งธ ์ค ์ค๋ฅธ์ชฝ์ ์ฌ์๋ฅผ ๋ฐฐ์นํ๋ค๋ฉด, (n-1)๋ฒ์งธ ์ค์ ์ฌ์๋ฅผ ์ผ์ชฝ์ ๋ฐฐ์นํ๊ฑฐ๋ ์์ ์ ํ ์ ์๋ค.
- ์ 2,3 ๊ฒฝ์ฐ๋ฅผ ํฉ์น๋ฉด, (n-1)๋ฒ์งธ ์ค๊น์ง๋ง ๋ฐฐ์นํ๋ ๊ฒฝ์ฐ์๋ค๊ฐ (n-1)๋ฒ์งธ์๋ ์์ ์ ํ๋ dp[n-2]๋ฅผ ๋ํ ์๋ค. ์ฆ, dp[n-1]+dp[n-2]
๋ค ๋ํ๋ฉด ๋ด๊ฐ ์ผ๋งค๋ก ๊ตฌํ ์ ํ์ dp[n] = 2*dp[n-1] + dp[n-2]๊ฐ ๋์จ๋ค.
๐ฉ๐ป ์ฝ๋
C++
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#define MAX 100001
#define MOD 9901
using namespace std;
int main(void) {
ios::sync_with_stdio(false);
cin.tie(NULL);
//freopen("input.txt", "rt", stdin);
int N;
cin >> N;
int dp[MAX];
dp[1] = 3; dp[2] = 7;
for (int i = 3; i <= N; i++) {
dp[i] = (2 * dp[i - 1] + dp[i - 2]) % MOD;
}
cout << dp[N];
return 0;
}
๋ง์ ์ฐธ๊ณ Thank you~๐โ๏ธ
'Coding Test > ๋ฐฑ์ค(BOJ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] ๋ฐฑ์ค #1431. ์๋ฆฌ์ผ ๋ฒํธ (C++) (0) | 2022.02.16 |
---|---|
[BOJ] ๋ฐฑ์ค #1026. ๋ณด๋ฌผ (C++) (0) | 2022.02.16 |
[BOJ] ๋ฐฑ์ค #2210. ์ซ์ํ ์ ํ (C++) (0) | 2022.02.13 |
[BOJ] ๋ฐฑ์ค #11047. ๋์ 0 (C++) (0) | 2022.02.13 |
[BOJ] ๋ฐฑ์ค #1251. ๋จ์ด ๋๋๊ธฐ (C++) (0) | 2022.02.13 |