[๋ฐฑ์ค(BOJ)] 2xn ํ์ผ๋ง(11726) C++
๋ฌธ์ : BOJ_11726๋ฒ 2xn ํ์ผ๋ง
๋ฌธ์ ์ค๋ช
DP
DP๋ฅผ ํ์ฉํ์ฌ ํด๊ฒฐํ ์ ์๋ ๊ธฐ๋ณธ๋ฌธ์ ์
๋๋ค.2X1
, 1X2
ํฌ๊ธฐ์ ๋ธ๋ก์ด ์๊ณ , n
์ด ์ฃผ์ด์ง๋๋ค.
์ด๋ 2Xn
ํฌ๊ธฐ์ ์ง์ฌ๊ฐํ์ ๋ธ๋ก์ ์ด์ฉํด ์ฑ์ฐ๋ ๋ฐฉ๋ฒ์ ์๋ฅผ ์ถ๋ ฅํด์ผ ํฉ๋๋ค
๋ฐฉ๋ฒ์ ์๊ฐ ์ปค์ง๋ฏ๋ก 10,007๋ก ๋๋ ๋๋จธ์ง๋ฅผ ์ถ๋ ฅํด์ผ ํฉ๋๋ค.
Solution
n
์ ํฌ๊ธฐ๊ฐ 1์ด๋ผ๋ฉด, 1X2
์ ๋ธ๋ก ํ๋๋ฅผ ์ธ์ฐ๋ 1๊ฐ์ง ๊ฒฝ์ฐ์ ์ ๋ฐ์ ์์ต๋๋ค.n
์ ํฌ๊ธฐ๊ฐ 2๋ผ๋ฉด, 1X2
์ ๋ธ๋ก ๋ ๊ฐ๋ฅผ ์ธ์ฐ๋ ๊ฒฝ์ฐ์ ์, 2X1
์ ๋ธ๋ก ๋ ๊ฐ๋ฅผ ์๋ ๊ฒฝ์ฐ์ ์, ์ด 2๊ฐ์
๋๋ค.n
์ ํฌ๊ธฐ๊ฐ 3 ์ด์ ์ผ ๋, DP๋ฅผ ์ ์ฉํ ์ ์๋ ๊ท์น์ด ์์ต๋๋ค.
๊ฐ์ฅ ์ค๋ฅธ์ชฝ
n ๋ฒ ์งธ ์นธ
์1X2
์ ๋ธ๋ก ํ๋๋ฅผ ์ธ์ด๋ค๋ฉด, ๊ทธ ์์n-1์นธ
์n-1
๊ฐ์ ๋ธ๋ก์ ์ธ์๋๋ ๊ฒฝ์ฐ์ ์์ ๊ฐ์ต๋๋ค.
๊ฐ์ฅ ์ค๋ฅธ์ชฝn ๋ฒ ์งธ
์n-1 ๋ฒ ์งธ ์นธ
์2X1
์ ๋ธ๋ก ๋ ๊ฐ๋ฅผ ์๋๋ค๋ฉด, ๊ทธ ์์n-2์นธ
์n-2
๊ฐ์ ๋ธ๋ก์ ์ธ์๋๋ ๊ฒฝ์ฐ์ ์์ ๊ฐ์ต๋๋ค.
๊ทธ๋ฌ๋ฏ๋ก dp[n] = dp[n-1] + dp[n-2] ์ด ์ฑ๋ฆฝํจ์ ์ ์ ์์ต๋๋ค.
Description
- dp์ ๊ฐ์ ๋ฐ๋ ๋ฐฐ์ด์ vector๋ก ๋์ ํ ๋นํ์์ต๋๋ค.
- resize๋ vector์ ๊ฐ์ด ๋ค์ด์์๋ค๋ฉด, ์ฌ๊ท๊ฐ ๋ค์ด๊ฐ์ง ์๊ณ return ํจ์ผ๋ก์จ, ๋ฉ๋ชจ์ด์ ์ด์ ์ ํ์ต๋๋ค.
#define MOD 10007;
๋ก mod ์ฐ์ฐ์ ํด์ผ ํ ์๋ฅผ ์ ์ํ์ต๋๋ค.
#include <iostream>
#include <vector>
#define MOD 10007;
using namespace std;
vector<long long> arr;
long long dp(int n);
int main(void) {
int n;
cin >> n;
arr.resize(n + 1);
cout << dp(n) << '\n';
}
long long dp(int n) {
if (n == 1) return arr[n] = 1;
else if (n == 2) return arr[n] = 2;
if (arr[n] != 0) return arr[n];
return arr[n] = (dp(n - 1) + dp(n - 2))%MOD;
}
'Algorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] ์ ๊ณฑ์์ ํฉ(1699) (0) | 2022.03.09 |
---|---|
[BOJ] ๋์ 2(2294) (0) | 2022.03.09 |
[BOJ] ์ฉ๋ ๋ถ์กฑ(5446) (0) | 2022.03.08 |
[BOJ] ๋ณด์ ์์(2792) (0) | 2022.03.07 |
[BOJ] ํด๋ํฐ ์ํ(5070) (0) | 2022.03.07 |