[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