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

๋ณธ๋ฌธ ์ œ๋ชฉ

[๋ฐฑ์ค€(BOJ)] 11053๋ฒˆ: ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด (Dynamic Programming, C++)

PROGRAMMING/Algorithm

by koharin 2021. 2. 19. 22:19

๋ณธ๋ฌธ

728x90
๋ฐ˜์‘ํ˜•

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


  • DP๋ฐฐ์—ด: ๊ฐ ์›์†Œ ์œ„์น˜์—์„œ ์ˆ˜์—ด ๊ธธ์ด์˜ ์ตœ๋Œ“๊ฐ’ ์ €์žฅ
    • DP๋ฐฐ์—ด์—์„œ ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ๊ฐ€์ง„ ๊ฒƒ์ด ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ์ˆ˜์—ด์˜ ๊ธธ์ด ์ตœ๋Œ“๊ฐ’์ด๋‹ค.
  • i๋ฒˆ์งธ์ผ ๋•Œ, i๋ฒˆ์งธ ์ „๊นŒ์ง€์˜ ๋ชจ๋“  ์ˆ˜(j๋ฒˆ์งธ ์ˆ˜)๋ฅผ ํƒ์ƒ‰ํ•˜๋ฉด์„œ ๋งŒ์•ฝ i๋ฒˆ์งธ๊ฐ€ j๋ฒˆ์งธ ์ˆ˜๋ณด๋‹ค ํฌ๋‹ค๋ฉด, ํ•ด๋‹น i๋ฒˆ์งธ์—์„œ ์ˆ˜์—ด ๊ธธ์ด์˜ ์ตœ๋Œ“๊ฐ’์„ ๊ตฌํ•ด์ค€๋‹ค.
    • ์ด์ „ ์›์†Œ๋“ค๊ณผ ๋น„๊ต ์ „ DP[i] = 1๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.
    • DP[i] = max(DP[i], DP[j] + 1)๋กœ ๊ตฌํ•˜๋Š”๋ฐ, DP[j] + 1๊ณผ ๋น„๊ตํ•˜๋Š” ์ด์œ ๋Š” ์ด์ „ ์›์†Œ j๋ฒˆ์งธ์—์„œ ๊ตฌํ•œ ์ˆ˜์—ด ๊ธธ์ด์˜ ์ตœ๋Œ“๊ฐ’์„ i๋ฒˆ์งธ ์›์†Œ ์œ„์น˜์—์„œ์ธ 1๊ณผ ๋”ํ–ˆ์„ ๋•Œ๊ฐ€ ์ตœ๋Œ“๊ฐ’์ผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

 

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


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

int main(){
    int N, result=0;
    scanf("%d", &N);
    int A[N]={};
    int DP[N] = {};

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

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

 

 

๐Ÿ‘ ๊ฒฐ๊ณผ


728x90
๋ฐ˜์‘ํ˜•

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