[c++] BOJ 2225 :: ํ•ฉ๋ถ„ํ•ด

 

๋‚œ์ด๋„ : ๊ณจ๋“œ 5

๊ฑธ๋ฆฐ ์‹œ๊ฐ„ : 50๋ถ„

๋ฌธ์ œ

ํ•ฉ๋ถ„ํ•ด ๋ฌธ์ œ ๋ฐ”๋กœ๊ฐ€๊ธฐ

 

2225๋ฒˆ: ํ•ฉ๋ถ„ํ•ด

์ฒซ์งธ ์ค„์— ๋‹ต์„ 1,000,000,000์œผ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

www.acmicpc.net

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 ํ•˜๋ผ๊ณ  ํ•  ๋•Œ๋Š” ์ˆ˜์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ค‘๊ฐ„์ค‘๊ฐ„ ๋‚˜๋ˆ ์ฃผ๊ธฐ!

 

๊ฒฐ๊ณผ

๋ฐ˜์‘ํ˜•