๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐˜š๐˜ญ๐˜ฐ๐˜ธ ๐˜ฃ๐˜ถ๐˜ต ๐˜ด๐˜ต๐˜ฆ๐˜ข๐˜ฅ๐˜บ

[๋ฐฑ์ค€] 2133๋ฒˆ: ํƒ€์ผ ์ฑ„์šฐ๊ธฐ - C++ ๋ณธ๋ฌธ

์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

[๋ฐฑ์ค€] 2133๋ฒˆ: ํƒ€์ผ ์ฑ„์šฐ๊ธฐ - C++

.23 2021. 7. 31. 00:25
๋ฌธ์ œ

3×N ํฌ๊ธฐ์˜ ๋ฒฝ์„ 2×1, 1×2 ํฌ๊ธฐ์˜ ํƒ€์ผ๋กœ ์ฑ„์šฐ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•ด๋ณด์ž.

 

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— N(1 ≤ N ≤ 30)์ด ์ฃผ์–ด์ง„๋‹ค.

 

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.


DP๋ฅผ ์ด์šฉํ•˜์—ฌ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ.

๋…ธ๊ฐ€๋‹ค

...์ด๋Ÿฐ์‹์œผ๋กœ ๋…ธ๊ฐ€๋‹ค๋กœ ๊ฒฝ์šฐ์˜ ์ˆ˜๋“ค์„ ํ’€์–ด์“ฐ๋‹ค๋ณด๋ฉด ๊ทœ์น™์„ ๋ฐœ๊ฒฌํ•˜์—ฌ ํ’€ ์ˆ˜ ์žˆ๋‹ค. ์‚ฌ์‹ค ๋‚˜๋Š” ๊ตฌ๊ธ€๋ง ํ•ด๋ด๋„ ์ดํ•ด๋ฅผ ๋ชปํ•ด์„œ ์ €๋ ‡๊ฒŒ ํ’€์—ˆ๋‹ค.

 

3×N ํฌ๊ธฐ์˜ ๋ฒฝ์„ 1×2 ํƒ€์ผ ํ˜น์€ 2×1 ํƒ€์ผ๋กœ ์ฑ„์šธ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋Š” N์ด ์ง์ˆ˜์ผ ๋•Œ ๋ฟ์ด๊ณ , N์ด 2์ผ๋•Œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฑ„์šธ ์ˆ˜ ์žˆ๋Š” ํƒ€์ผ์˜ ๋ชจ์Šต์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚˜์˜จ๋‹ค.

D[2] = 3

๊ทธ๋ฆฌ๊ณ , N์ด 4 ์ด์ƒ์ผ ๊ฒฝ์šฐ ์œ„์™€ ๊ฐ™์ด ๊ฐ ํƒ€์ผ์˜ ๊ธธ์ด๋งŒํผ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ๋Š” ์ถ”๊ฐ€์ ์ธ ๊ฒฝ์šฐ๋“ค์ด ์กด์žฌํ•œ๋‹ค.

 

๋”ฐ๋ผ์„œ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋ชจ๋‘ ์ •๋ฆฌํ•˜๋ฉด ์ ํ™”์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

1. n ≥ 2, D[n] = D[n - 2] * D[2] // D[2] = 3

2. n ≥ 4, D[n] = D[n - 4] * 2

 

3. n ≥ 6, D[n] = D[n - 6] * 2

...

...

โžก๏ธ D[n] = D[n - 2] * D[2] + D[n - 4] * 2 + ... + D[2] * 2 + D[0] * 2 (n ≥ 4)

 

์œ„์™€ ๊ฐ™์ด ๊ทœ์น™์— ๋”ฐ๋ผ ๋‚˜์˜จ ๊ฐ’๋“ค์„ ๋ชจ๋‘ ๋”ํ•ด์ฃผ๋ฉด ๋‹ต์ด ๋‚˜์˜จ๋‹ค. ์—ฌ๊ธฐ์„œ D[0]์€ ์œ„์˜ N์ด 4 ์ด์ƒ์ผ ๋•Œ์˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ์ž๊ธฐ ์ž์‹ ์˜ ๊ธธ์ด๋งŒํผ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋กœ, D[0] = 1์ด๋‹ค.

 

์ฝ”๋“œ
#include <cstdio>
#include <vector>
#define MAX 31

using namespace std;
int DP(int num);
vector<int> memo(MAX, 0);

int main(void) {
    int n;
    scanf("%d", &n);
    printf("%d\n", DP(n));
    return 0;
}

int DP(int num) {
    memo[0] = 1;
    memo[2] = 3;

    for(int i = 4; i <= num; i++) {
        memo[i] += memo[i - 2] * memo[2];
        for(int j = 4; j <= i; j += 2) {
            memo[i] += memo[i - j] * 2;
        }
    }

    return memo[num];
}
Comments