๋์ด๋ : ๊ณจ๋ 5
๊ฑธ๋ฆฐ ์๊ฐ : 50๋ถ
๋ฌธ์
0๋ถํฐ N๊น์ง์ ์ ์ K๊ฐ๋ฅผ ๋ํด์ ๊ทธ ํฉ์ด N์ด ๋๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
๋ง์ ์ ์์๊ฐ ๋ฐ๋ ๊ฒฝ์ฐ๋ ๋ค๋ฅธ ๊ฒฝ์ฐ๋ก ์ผ๋ค(1+2์ 2+1์ ์๋ก ๋ค๋ฅธ ๊ฒฝ์ฐ). ๋ํ ํ ๊ฐ์ ์๋ฅผ ์ฌ๋ฌ ๋ฒ ์ธ ์๋ ์๋ค.
ํ์ด
- ์์ ๋ฌธ์ : ํ์ฌ ๋จ์ N์์ ๋จ์ K๊ฐ๋ก N์ ๋ง๋ค ์ ์๋ ๊ฒฝ์ฐ์ ์
- ์ฌ๊ท ํจ์ : (N, K) => int ์ ํํ
- ์ฌ์ฉํ๋ ์ i๋ฅผ for๋ฌธ ๋๋ฉด์, j๋ฅผ 1์ฉ ๊ฐ์์์ผ์ ์ฌ๊ท
- ์ข
๋ฃ ์กฐ๊ฑด
- N์ด 0์ผ ๋๋ ๋จ์ ์๊ฐ ๋ชจ๋ 0์ธ ๊ฒฝ์ฐ 1๊ฐ์ง๋ง ์กด์ฌ
- K๊ฐ 0์ด๊ณ N๊ฐ 0์ด ์๋ ๋ ๋จ์ ๊ฒฝ์ฐ์ ์ ์์ => 0 ๋ฐํ
- DP : N, K๋ฅผ ํ, ์ด๋ก ํ๊ณ ๊ฐ์ด ๊ฒฝ์ฐ์ ์์ธ 2์ฐจ์ ๋ฐฐ์ด ํํ
๊ทธ๋ฆผ์ผ๋ก ํํํ์๋ฉด ์ด๋ฌํ ํํ์ด๊ณ , ์งํ ํ๋์์ ๋ถ๋ถ์ ์ ์ ํ๋์ ๋ถ๋ถ์ ํฉ์ด ๋๋ค.
์ฝ๋
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
long long memo[201][201];
int returnCase(int N, int K) {
if (N == 0) {
// ๋ => ๋จ์ K๋ฅผ 0์ผ๋ก ์ฑ์ฐ๋ ํ๋์ ๊ฒฝ์ฐ ์กด์ฌ
return 1;
}
if (K == 0) {
// K๋ ๋๋ฌ๋๋ฐ ์๊ฐ ๋๋์ง ์์์ ๋ => ๊ฒฝ์ฐ ์กด์ฌ x
return 0;
}
long long res = 0;
for (int i = 0; i <= N; i++) {
if (memo[N - i][K - 1] != -1) {
res += memo[N - i][K - 1];
continue;
}
memo[N - i][K - 1] = returnCase(N - i, K - 1);
res += memo[N - i][K - 1];
}
return res % 1000000000;
}
int main() {
// 7์ 12๋ถ ์์
// 8์ ๋ (50๋ถ)
// ์
๋ ฅ ๋ฐ๊ธฐ
int N, K;
cin >> N >> K;
memset(memo, -1, sizeof(memo));
int res = returnCase(N, K);
if (res >= 1000000000)
cout << res % 1000000000;
else
cout << res;
cin >> N;
}
์ฃผ์ํ ์
์ด๋ ๊ฒ ํฐ ์๋ก ๋๋ ์ return ํ๋ผ๊ณ ํ ๋๋ ์์ ๋ฒ์๋ฅผ ๋ฒ์ด๋ ์ ์์ผ๋ฏ๋ก ์ค๊ฐ์ค๊ฐ ๋๋ ์ฃผ๊ธฐ!
๊ฒฐ๊ณผ
๋ฐ์ํ
'Algorithm ๋ฌธ์ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[c++] BOJ 1753 :: ์ต๋จ๊ฒฝ๋ก (0) | 2021.04.06 |
---|---|
[c++] BOJ 1005 :: ACM Craft (0) | 2021.03.21 |
[c++] BOJ 1149 :: RGB๊ฑฐ๋ฆฌ (0) | 2021.03.12 |
[c++] BOJ 1520 :: ๋ด๋ฆฌ๋ง๊ธธ (0) | 2021.03.12 |
[c++] BOJ 12865 :: ํ๋ฒํ ๋ฐฐ๋ญ (0) | 2021.03.12 |
Comment