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

๋ณธ๋ฌธ ์ œ๋ชฉ

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

PROGRAMMING/Algorithm

by koharin 2021. 2. 20. 02:35

๋ณธ๋ฌธ

728x90
๋ฐ˜์‘ํ˜•

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


  • BOJ:11053 ๋ฌธ์ œ์—์„œ ์ฝ”๋“œ ํ•œ ์ค„๋งŒ ๋ฐ”๊ฟ”์ฃผ๋ฉด ๋œ๋‹ค.
  • DP ๋ฐฐ์—ด์€ ๊ฐ ์›์†Œ์—์„œ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ๊ธด ๊ฐ์†Œํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ๊ธธ์ด๋ฅผ ์ €์žฅํ•œ๋‹ค.
  • i๋ฒˆ์งธ์—์„œ DP[i] = 1, ์ฆ‰ ๊ธธ์ด 1๋กœ ์ดˆ๊ธฐํ™”ํ•˜๊ณ , i๋ฒˆ์งธ ์ „๊นŒ์ง€ ์›์†Œ ๊ฐ’๊ณผ i๋ฒˆ์งธ ๊ฐ’๊ณผ ๋น„๊ตํ•ด์„œ A[i] < A[j]์ด๋ฉด DP[i]๋ฅผ ์„ค์ •ํ•ด์ค€๋‹ค.
  • ์ด๋•Œ, ๊ฐ€์žฅ ๊ธด ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ DP[j]์—์„œ i๋ฒˆ์งธ๋ฅผ ๋”ํ•˜๋ฉด +1์ด ๋˜๋Š” DP[j]+1๊ณผ, DP[i]์—์„œ ๋” ํฐ ๊ฐ’์„ ๊ฐ€์ ธ์˜จ๋‹ค. => max ํ•จ์ˆ˜ ์‚ฌ์šฉ
  • ๋งˆ์ง€๋ง‰์— DP ๋ฐฐ์—ด์—์„œ ๊ฐ€์žฅ ํฐ ๊ฐ’์„ max_element ํ•จ์ˆ˜๋กœ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

 

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


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

int main(){
    int N;
    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);
        }
    }
    printf("%d", *max_element(DP, DP+N));
}

 

 

 

๐Ÿ‘ ๊ฒฐ๊ณผ


728x90
๋ฐ˜์‘ํ˜•

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