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

๋ณธ๋ฌธ ์ œ๋ชฉ

[๋ฐฑ์ค€(BOJ)] 9465๋ฒˆ: ์Šคํ‹ฐ์ปค (Dynamic Programming, C++)

PROGRAMMING/Algorithm

by koharin 2021. 2. 19. 22:08

๋ณธ๋ฌธ

728x90
๋ฐ˜์‘ํ˜•

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


  • DP ๋ฐฐ์—ด์„ ๊ฐ ์›์†Œ์—์„œ ์Šคํ‹ฐ์ปค๋ฅผ ๋–ผ์–ด๋ƒˆ์„ ๋•Œ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ“๊ฐ’์ด๋ผ๊ณ  ํ•˜์ž.
  • ์Šคํ‹ฐ์ปค๊ฐ€ ๋‹ด๊ธด ๋ฐฐ์—ด์„ num์ด๋ผ ํ•  ๋•Œ, i๋ฒˆ์งธ ๊ธฐ์ค€ ์ƒ, ํ•˜, ์ขŒ, ์šฐ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. ๋”ฐ๋ผ์„œ i๋ฒˆ์งธ ๊ธฐ์ค€์œผ๋กœ DP[0][i]๋ผ๋ฉด DP[1][i-1], DP[1][i-2] ์ค‘์—์„œ ๋” ํฐ ๊ฐ’์„ ๊ฐ€์ ธ์™€์„œ ํ˜„์žฌ num[0][i]์™€ ๋”ํ•œ๋‹ค. ๊ทธ๋Ÿผ num[0][i]๋ฅผ ๋–ผ์–ด๋ƒˆ์„ ๋•Œ๊นŒ์ง€ ๊ฐ€์žฅ ์Šคํ‹ฐ์ปค๋ฅผ ๋—์„ ๋•Œ ์ตœ๋Œ“๊ฐ’์ด๋‹ค.

  • DP[1][i]์—์„œ๋Š” DP[1][i-1], DP[1][i-2]์—์„œ ๋” ํฐ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๊ณ , ํ˜„์žฌ์˜ num[1][i] ๊ฐ’์„ ๋”ํ•ด์ค€๋‹ค.
  • DP[0][i], DP[1][i]์—์„œ์”ฉ ๊ฐ๊ฐ ๊ตฌํ•ด์ฃผ๋ฉด, ๋งˆ์ง€๋ง‰์—” DP[0][n-1], DP[1][n-1]์— ๋‹ด๊ธด๋‹ค. DP[0][n-1]๊ณผ DP[1][n-1]์—์„œ ๋” ํฐ ๊ฐ’์ด ์Šคํ‹ฐ์ปค๋ฅผ ๋–ผ์–ด๋ƒˆ์„ ๋•Œ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ“๊ฐ’์ด๋‹ค.

 

 

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


#include <stdio.h>
#include <algorithm>

using namespace std;

int main(){
    int T;
    scanf("%d", &T);
    
    for(int i=0; i<T; i++){
        int n; 
        scanf("%d", &n);
        int num[2][n] = {0};
        int DP[2][n] = {0};
        
        
        for(int j=0; j<2; j++){
            for(int k=0; k<n; k++) scanf("%d", &num[j][k]);
        }
        
        DP[0][0] = num[0][0];
        DP[1][0] = num[1][0];
        DP[0][1] = num[0][1] + DP[1][0];
        DP[1][1] = num[1][1] + DP[0][0];
    
        for(int j=2; j<n; j++){
            DP[0][j] = num[0][j] + max(DP[1][j-1], DP[1][j-2]);
            DP[1][j] = num[1][j] + max(DP[0][j-1], DP[0][j-2]);
        }
        printf("%d\n", max(DP[0][n-1], DP[1][n-1]));
    }
}

 

 

๐Ÿ‘ ๊ฒฐ๊ณผ


728x90
๋ฐ˜์‘ํ˜•

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