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

๋ณธ๋ฌธ ์ œ๋ชฉ

[๋ฐฑ์ค€(BOJ] 11054๋ฒˆ: ๊ฐ€์žฅ ๊ธด ๋ฐ”์ดํ† ๋‹‰ ๋ถ€๋ถ„ ์ˆ˜์—ด (Dynamic Programming, C++)

PROGRAMMING/Algorithm

by koharin 2021. 2. 21. 01:29

๋ณธ๋ฌธ

728x90
๋ฐ˜์‘ํ˜•

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


DP[i]: i๋ฒˆ์งธ์—์„œ ์ฆ๊ฐ€ํ•˜๋Š” ๊ฐ€์žฅ ํฐ ๋ถ€๋ถ„์ˆ˜์—ด

DP2[i] : ๋งจ ๋’ค์—์„œ๋ถ€ํ„ฐ ํƒ์ƒ‰ํ–ˆ์„ ๋•Œ, i๋ฒˆ์งธ์—์„œ ๊ฐ€์žฅ ํฐ ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„์ˆ˜์—ด

i๋ฒˆ์งธ ๊ธฐ์ค€์œผ๋กœ DP[i]์™€ DP2[i]์˜ ํ•ฉ์ด ๊ฐ€์žฅ ํฌ๋‹ค๋ฉด, i๋ฒˆ์งธ ๊ธฐ์ค€ ์ด์ „์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„์ˆ˜์—ด๊ณผ, ๋งจ ๋’ค ๊ธฐ์ค€์œผ๋กœ i๋ฒˆ์งธ๊นŒ์ง€ ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„์ˆ˜์—ด์„ ํ•ฉํ–ˆ์„ ๋•Œ ๊ทธ ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ํฐ ๊ฒƒ์ด๋‹ค.

์ด๋•Œ DP[i]์™€ DP2[i]์—๋Š” i๋ฒˆ์งธ๊ฐ€ ๊ฐ๊ฐ ํฌํ•จ๋˜์–ด ํ•ฉํ•˜๊ฒŒ ๋˜๋ฉด i๋ฒˆ์งธ๋ฅผ 2๋ฒˆ ์นด์šดํŒ…ํ•œ ๊ฒƒ์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์— DP[i] + DP2[i] - 1๋กœ ๋‹ต์„ ๊ตฌํ•œ๋‹ค.

 

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


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

int main(){
    int N;
    scanf("%d", &N);
    int S[N] = {}; int DP[N] = {}; int DP2[N] = {};

    for(int i=0; i<N; i++) scanf("%d", &S[i]);

    for(int i=0; i<N; i++){
        DP[i] = 1;
        for(int j=0; j<i; j++){
            if(S[i] > S[j]) DP[i] = max(DP[i], DP[j]+1);
        }        
    }
    for(int i=N-1; i>=0; i--){
        DP2[i] = 1;
        for(int j=N-1; j>i; j--){
            if(S[i] > S[j]) DP2[i] = max(DP2[i], DP2[j]+1);
        }        
    }

    int result=1;
    
    for(int i=0; i<N; i++){
        result = max(result, DP[i] + DP2[i]-1);
    }
    
    printf("%d", result);
}

 

 

๐Ÿ‘ ๊ฒฐ๊ณผ


728x90
๋ฐ˜์‘ํ˜•

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