# [DP] 11053. ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด 4
Study Repository

[DP] 11053. ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด 4

by rlaehddnd0422

 

๋ฌธ์ œ

์ˆ˜์—ด A๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„์ˆ˜์—ด์˜ ๊ธธ์ด์™€ ๋ถ€๋ถ„์ˆ˜์—ด์„ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ.

์ฆ๊ฐ€ ์ˆ˜์—ด์˜ ๊ธธ์ด๋Š” DP๋ฅผ ์ด์šฉํ•˜์—ฌ ์‰ฝ๊ฒŒ ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

์šฐ์„  ์ฆ๊ฐ€์ˆ˜์—ด์˜ ๊ธธ์ด๋ถ€ํ„ฐ ๊ตฌํ•ด๋ด…์‹œ๋‹ค.

 

1. dp ๋ฐฐ์—ด ๊ฐ’์„ ๋ชจ๋‘ 1๋กœ ์ดˆ๊ธฐํ™” ํ•ฉ๋‹ˆ๋‹ค.

: v ๋ฐฐ์—ด์—์„œ ๋ชจ๋“  ์ธ๋ฑ์Šค์˜ ๋ฐฐ์—ด๊ฐ’์€ ์ฆ๊ฐ€ ์ˆ˜์—ด์˜ ์‹œ์ž‘์ด ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— 1๋กœ ์ดˆ๊ธฐํ™” ํ•ด์ค๋‹ˆ๋‹ค.

 

 

2. 0๋ฒˆ์งธ๋ถ€ํ„ฐ n-1๋ฒˆ์งธ ๊นŒ์ง€ ์ด์ค‘ ํฌ๋ฌธ์œผ๋กœ ํ˜„์žฌ ์ธ๋ฑ์Šค ์œ„์น˜์˜ ๊ฐ’๋ณด๋‹ค ๋‹ค์Œ ์ธ๋ฑ์Šค ์œ„์น˜(j๋ฒˆ์งธ)์˜ ๊ฐ’์ด ๋” ํฌ๋‹ค๋ฉด

dp ๋ฐฐ์—ด์˜ j๋ฒˆ์งธ ๊ฐ’๊ณผ, i๋ฒˆ์งธ ๊ฐ’ + 1์ค‘ ํฐ ๊ฐ’์„ dp๋ฐฐ์—ด์˜ j๋ฒˆ์งธ ๊ฐ’์— ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค.

 

 

3. ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์„ ์ถœ๋ ฅ

 

dp ๋ฐฐ์—ด์„ ์ด์šฉํ•˜์—ฌ ์—ญ์ถ”์ ํ•˜์—ฌ ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„์ˆ˜์—ด์„ ์‰ฝ๊ฒŒ ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ญ์ถ”์ ํ•˜์ง€ ์•Š๊ณ  dp๊ฐ’์ด 1์ธ ๋ฐฐ์—ด๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ๊ฐ€์žฅ ํฐ ๊ธธ์ด์ธ 4๊นŒ์ง€ ๊ฐ€๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์ง€๋งŒ,
์ถ”์ ๊ณผ์ •์—์„œ ๊ฐ€์žฅ ํฐ ๊ธธ์ด์ธ 4๋ฅผ ์•Œ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๋์—์„œ๋ถ€ํ„ฐ ์—ญ์ถ”์ ํ•˜๋Š” ๊ณผ์ •์ด ํ›จ์”ฌ ๋‹จ์ˆœ.

 

์†Œ์Šค์ฝ”๋“œ

#include <iostream>
#include <vector>
#include <algorithm>
#include <utility>
#include <stack>
#include <queue>
#define FASTio ios_base :: sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL)
#define endl '\n' 

using namespace std;

int n;

vector<int> v(1001,0);
int d[1001];
int ans;

stack<int> st;
int main()
{
    FASTio;
    cin >> n;

    for(int i=0;i<n;i++)
    {
        cin >> v[i];
        d[i] = 1;
    }

    for(int i=0;i<n;i++)
    {  
        for(int j=i+1;j<n;j++)
        {
            if(v[j] > v[i])
            {   
                d[j] = max(d[i] + 1, d[j]);
            }
        }
    }

    for(int i=0;i<n;i++)
    {   
        ans = max(ans, d[i]);
    }

    cout << ans << endl;

    int k = 1;

    for(int i=0;i<n;i++)
    {
        if(d[i]==k)
        {
            st.push(v[i]);
            k++;
        }
    }
    while(!st.empty())
    {
        cout << st.top() << ' ';
        st.pop();

    }
    return 0;
}

 

 

 

 

๋ธ”๋กœ๊ทธ์˜ ์ •๋ณด

Study Repository

rlaehddnd0422

ํ™œ๋™ํ•˜๊ธฐ