[BOJ][C++] ๋ฐฑ์ค€ 9184๋ฒˆ: ์‹ ๋‚˜๋Š” ํ•จ์ˆ˜ ์‹คํ–‰

2024. 5. 12. 17:10ยท๐Ÿ’ญ Problem Solving/C++

๋ฌธ์ œ

https://www.acmicpc.net/problem/9184

ํ’€์ด

๋ฌธ์ œ์— ๋‚˜์™€์žˆ๋Š” ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

int w(int a, int b, int c) {
    if (a <= 0 || b <= 0 || c <= 0)
        return 1;
    else if (a > 20 || b > 20 || c > 20)
        return w(20, 20, 20);
    else if (a < b && b < c)
        return w(a, b, c-1) + w(a, b-1, c-1) - w(a, b-1, c);
    else
        return w(a-1, b, c) + w(a-1, b-1, c)
                + w(a-1, b, c-1) - w(a-1, b-1, c-1);
}

 

์žฌ๊ท€์˜ ํšŸ์ˆ˜๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด w์˜ ๊ฒฐ๊ณผ ๊ฐ’์„ dp ๋ฐฐ์—ด์— ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. a, b, c์˜ ๊ฐ’์— ๋”ฐ๋ฅธ ๊ฒฐ๊ณผ๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ 3์ฐจ์› dp ๋ฐฐ์—ด์„ ์„ ์–ธํ•œ๋‹ค.
  2. w(a, b, c) ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ–ˆ์„ ๋•Œ ๋ฐฐ์—ด์— ์ด๋ฏธ ์ €์žฅ๋œ ๊ฐ’์ด๋ฉด, ์žฌ๊ท€ ๊ณผ์ •์„ ์ƒ๋žตํ•˜๊ณ  ๊ทธ ๊ฐ’์„ ๋ถˆ๋Ÿฌ์˜จ๋‹ค.
  3. ๋ฐฐ์—ด์— ๊ฐ’์„ ์ €์žฅํ•  ๋•Œ ์ธ๋ฑ์Šค์— ์Œ์ˆ˜ ๋˜๋Š” 20 ์ด์ƒ์˜ ์ˆ˜๊ฐ€ ๋“ค์–ด๊ฐ€์ง€ ์•Š๋„๋ก ์œ ์˜ํ•œ๋‹ค.

์ฝ”๋“œ

#include <iostream>
#include <vector>

using namespace std;

vector<vector<vector<int>>> dp;

int w(int a, int b, int c) {
    if (a <= 0 || b <= 0 || c <= 0) {   // ์ธ๋ฑ์Šค์— ์Œ์ˆ˜๊ฐ€ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์—†์Œ
        return 1;
    } else if (a > 20 || b > 20 || c > 20) {    // ์ธ๋ฑ์Šค์— 21 ์ด์ƒ์ด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์—†์Œ
        return w(20, 20, 20);
    } else if (dp[a][b][c]) { // ๊ฐ’์ด ์กด์žฌํ•˜๋ฉด ์•„๋ž˜ ์žฌ๊ท€ ์ƒ๋žต
        return dp[a][b][c];
    } else if (a < b && b < c) {
        dp[a][b][c] = w(a, b, c - 1) + w(a, b - 1, c - 1) - w(a, b - 1, c);
    } else {
        dp[a][b][c] = w(a - 1, b, c) + w(a - 1, b - 1, c)
                      + w(a - 1, b, c - 1) - w(a - 1, b - 1, c - 1);
    }

    return dp[a][b][c];
}

int main() {
    int a, b, c;
    dp.assign(21, vector<vector<int>>(21, vector<int>(21, 0)));

    while (true) {
        cin >> a >> b >> c;
        if (a == -1 && b == -1 && c == -1)
            break;
        cout << "w(" << a << ", " << b << ", " << c << ") = " << w(a, b, c) << '\n';
    }

    return 0;
}

 

'๐Ÿ’ญ Problem Solving > C++' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค][C++] ์ฒด์œก๋ณต  (0) 2024.05.24
[BOJ][C++] ๋ฐฑ์ค€ 1212๋ฒˆ: 8์ง„์ˆ˜ 2์ง„์ˆ˜  (0) 2024.05.24
[SWEA][C++] 1209. [S/W ๋ฌธ์ œํ•ด๊ฒฐ ๊ธฐ๋ณธ] 2์ผ์ฐจ - Sum  (0) 2024.05.06
[SWEA][C++] 2805. ๋†์ž‘๋ฌผ ์ˆ˜ํ™•ํ•˜๊ธฐ  (0) 2024.05.05
[SWEA][C++] 1208. [S/W ๋ฌธ์ œํ•ด๊ฒฐ ๊ธฐ๋ณธ] 1์ผ์ฐจ - Flatten  (0) 2024.04.27
'๐Ÿ’ญ Problem Solving/C++' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค][C++] ์ฒด์œก๋ณต
  • [BOJ][C++] ๋ฐฑ์ค€ 1212๋ฒˆ: 8์ง„์ˆ˜ 2์ง„์ˆ˜
  • [SWEA][C++] 1209. [S/W ๋ฌธ์ œํ•ด๊ฒฐ ๊ธฐ๋ณธ] 2์ผ์ฐจ - Sum
  • [SWEA][C++] 2805. ๋†์ž‘๋ฌผ ์ˆ˜ํ™•ํ•˜๊ธฐ
0=2.
0=2.
  • 0=2.
    0=2
    0=2.
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (65)
      • ๐Ÿ“‚ Project (2)
        • Paint the City (2)
      • ๐Ÿ’ญ Problem Solving (28)
        • C++ (28)
      • ๐Ÿ“ Study (1)
        • React (1)
      • ๐Ÿ’ป CS (2)
        • ๐Ÿ“˜ Dev Book (2)
      • ๐Ÿƒ‍โ™€๏ธ Activities (32)
        • Web Front-End Basic Study (6)
        • 42 Cursus (26)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
    • ๊ธ€์“ฐ๊ธฐ
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜
    ๋งต
    ์ •๋ ฌ
    C
    ๋ฐฑ์ค€
    dynamic programming
    HTML
    swea
    ๋ธŒ๋ฃจํŠธํฌ์Šค
    react
    JavaScript
    VR
    ๋ฐฑํŠธ๋ž˜ํ‚น
    knapsack
    makefile
    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
    dfs
    42๊ฒฝ์‚ฐ
    ์‹œ๋ฎฌ๋ ˆ์ด์…˜
    git
    unity
    ๊ตฌํ˜„
    .h
    La Piscine
    BFS
    CSS
    github
    CS
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
0=2.
[BOJ][C++] ๋ฐฑ์ค€ 9184๋ฒˆ: ์‹ ๋‚˜๋Š” ํ•จ์ˆ˜ ์‹คํ–‰
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”