์ƒ์„ธ ์ปจํ…์ธ 

๋ณธ๋ฌธ ์ œ๋ชฉ

[๋ฐฑ์ค€(BOJ)] 2133๋ฒˆ: ํƒ€์ผ ์ฑ„์šฐ๊ธฐ (Dynamic Programming, C++)

PROGRAMMING/Algorithm

by koharin 2021. 2. 23. 01:15

๋ณธ๋ฌธ

728x90
๋ฐ˜์‘ํ˜•

๐Ÿ“ ๋ฌธ์ œํ’€์ด ๊ณผ์ •


N์ด ํ™€์ˆ˜์ธ ๊ฒฝ์šฐ

  • 2 x 1, 1 x 2 ํƒ€์ผ์„ ์ฑ„์šธ ์ˆ˜ ์—†๋‹ค.
  • DP[N] = 0

N์ด ์ง์ˆ˜์ธ ๊ฒฝ์šฐ

  • DP[i] = DP[n-2]*3 : DP[n-2]์—์„œ 3 x 2์— ๋Œ€ํ•ด 3๊ฐ€์ง€ ๊ฒฝ์šฐ๊ฐ€ ์กด์žฌํ•œ๋‹ค.

  • 4 ์ด์ƒ์˜ ์ง์ˆ˜์ธ ๊ฒฝ์šฐ์—, ์œ„์™€ ๊ฐ™์€ ํ˜•ํƒœ๊ฐ€ 2๊ฐœ์”ฉ ์กด์žฌํ•œ๋‹ค.

 

 

๐Ÿ’ป C++ ์ œ์ถœ์ฝ”๋“œ


#include <stdio.h>
#include <deque>
using namespace std;

int main(){
    int N;
    scanf("%d", &N);
    deque<int> DP(N+1, 0);
    DP[0] = 1;
    DP[2] = 3;
    if(N%2 !=0 ) DP[N] = 0; // N == ํ™€์ˆ˜

    // N == ์ง์ˆ˜
    for(int i=4; i<=N; i+=2){
        DP[i] = DP[i-2]*3;
        for(int j=i-4; j >= 0; j -= 2) DP[i] += DP[j]*2;
    }
    printf("%d", DP[N]);

}

DP[0]์€ 2์ธ ๊ฒฝ์šฐ์— ํ•„์š”ํ•˜๋ฏ€๋กœ 1๋กœ ์ดˆ๊ธฐํ™”ํ•ด์ค€๋‹ค.

 

 

๐Ÿ‘ ๊ฒฐ๊ณผ


728x90
๋ฐ˜์‘ํ˜•

๊ด€๋ จ๊ธ€ ๋”๋ณด๊ธฐ