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

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

[๋ฐฑ์ค€] 11726๋ฒˆ: 2×n ํƒ€์ผ๋ง - C++ ๋ณธ๋ฌธ

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์ค€๋น„/๋ฐฑ์ค€

[๋ฐฑ์ค€] 11726๋ฒˆ: 2×n ํƒ€์ผ๋ง - C++

.23 2021. 7. 12. 16:57
๋ฌธ์ œ

2×n ํฌ๊ธฐ์˜ ์ง์‚ฌ๊ฐํ˜•์„ 1×2, 2×1 ํƒ€์ผ๋กœ ์ฑ„์šฐ๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์•„๋ž˜ ๊ทธ๋ฆผ์€ 2×5 ํฌ๊ธฐ์˜ ์ง์‚ฌ๊ฐํ˜•์„ ์ฑ„์šด ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์˜ ์˜ˆ์ด๋‹ค.

์ž…๋ ฅ

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

 

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— 2×n ํฌ๊ธฐ์˜ ์ง์‚ฌ๊ฐํ˜•์„ ์ฑ„์šฐ๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ 10,007๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.


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

2xn ๋ชจ์–‘ ์ง์‚ฌ๊ฐํ˜•์„ ์ฑ„์šธ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•

๊ทœ์น™์„ ์ƒ๊ฐํ•˜๋ฉด ์œ„ ์‚ฌ์ง„๊ณผ ๊ฐ™๋‹ค. ํƒ€์ผ์„ ๋ฐฐ์น˜ํ•  ๋•Œ ๋งˆ๋‹ค ๊ฐ€๋กœ ํ•œ ์นธ์„ 1x2 ํƒ€์ผ๋กœ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ• ํ•˜๋‚˜, ๊ฐ€๋กœ ๋‘ ์นธ์„ 2x1 ํƒ€์ผ์„ ์œ„์•„๋ž˜๋กœ ๋‘๊ฐœ ์Œ“์•„ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ• ํ•˜๋‚˜๊ฐ€ ์žˆ์–ด ์ ํ™”์‹์„ ์„ธ์›Œ๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‹์ด ๋‚˜์˜จ๋‹ค.

 

D[n] = D[n - 1] + D[n- 2]

 

๋งž๋‹ค. ๊ทธ๋ƒฅ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด ๋ฌธ์ œ๋‹ค. ์ดˆ๊ธฐ๊ฐ’ ์„ค์ •๊ณผ ๋งค ์—ฐ์‚ฐ๋งˆ๋‹ค 10007์„ ๋‚˜๋ˆ ์ฃผ๋Š” ๊ฒƒ์—๋งŒ ์œ ์˜ํ•˜์—ฌ ํ’€๋ฉด ๋œ๋‹ค. 

 

๋ฌธ์ œ๋Š” top-down ๋ฐฉ์‹์„ ์ด์šฉํ•˜์—ฌ ํ’€์—ˆ๋‹ค. ๋‹ค๋งŒ ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ์ธ ๋งŒํผ, ์กฐ๊ธˆ๋งŒ ๊ณ ์น˜๋ฉด bottom-up ๋ฐฉ์‹์œผ๋กœ๋„ ํ’€ ์ˆ˜ ์žˆ๋‹ค.

 

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

using namespace std;

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

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

int DP(int num) {
    if(num <= 2) return num;
    if(memo[num] > 0) return memo[num];

    int result = (DP(num - 1) + DP(num - 2)) % 10007;
    memo[num] = result;
    return result;
}
Comments