๐ค๋ฌธ์ ์ดํด
i+1๋ฒ์งธ ์๊ฐ i๋ฒ์งธ ์๋ณด๋ค ํฐ ๋ถ๋ถ ์์ด ์ค์์ ๊ฐ์ฅ ๊ธด ์์ด์ ๊ธธ์ด๋ฅผ ์ถ๋ ฅํ๋ ๋ฌธ์ ์ด๋ค.
๐ก์ฒซ๋ฒ์งธ ์์ด๋์ด
์ฒ์์ ๋ถ๋ฅดํธ ํฌ์ค๊ฐ ์๊ฐ๋ฌ๋ค. ๊ทธ๋ฅ ๋์ผ๋ก ๊ณ์ฐํด๋ด๋ ๋ชจ๋ ์กฐํฉ์ ์๊ฐํด๋ด์ผ ํ๋ฆฐ๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทผ๋ฐ ์ ๊ฑธ ์ฒ์๋ถํฐ ๋ชจ๋ ์กฐํฉ์ ๋ค ๊ณ์ฐํ๊ฒ ๋๋ฉด 1์ด๋ ๊ฑฐ๋ฌํ ๋๊ธฐ๊ฒ ๋๋ค...
๐ก๋๋ฒ์งธ ์์ด๋์ด
๋ฉํ ๋์๊ฒ LCS(longest increasing subsequence)๋ฅผ ํธ๋ ๋ฐฉ๋ฒ์ ์ ์๋ฐ์๋ค!
ํ์ด์ ์์ธํ ์ค๋ช ํ๊ฒ ๋ค.
๐ฅํ์ด๐ฅ
์ ๋ ฅ๋ฐ์ ์์ด์ arr์ ์์๋๋ก ์ ์ฅํด๋๊ณ dp ๋ฐฐ์ด์ arr๊ฐ์ผ๋ก ์ด๊ธฐํํด์ค๋ค.
์์ด์ ๋๋ฒ์งธ ์๋ถํฐ n๋ฒ์งธ ์๊น์ง๋ฅผ ๋ํ๋ด๋ ์ธ๋ฑ์ค i์ ์ฒซ๋ฒ์งธ ์๋ถํฐ i๋ฒ์งธ ์๊น์ง๋ฅผ ๋ํ๋ด๋ ์ธ๋ฑ์ค j๊ฐ ์๋ค๊ณ ํ์.
๋ง์ฝ arr[j]๊ฐ arr[i]๋ณด๋ค ์๋ค๋ฉด, ์ฆ ์ฆ๊ฐํ๋ค๋ฉด dp[i]์ dp[j] + 1 ์ค์์ ๋ ํฐ ๊ฐ์ dp[i]์ ๋ฃ์ด์ค๋ค.
=> dp[i]๋ i๋ฒ์งธ ์๋ฅผ ์์ด์ ๋ง์ง๋ง ์๋ก ํ์ ๋ ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ์์ด์ ์๋ฏธ
#include <iostream>
#include <cmath>
using namespace std;
int n;
int arr[1001];
int dp[1001];
int main() {
cin.tie(nullptr);
cout.tie(nullptr);
ios::sync_with_stdio(false);
cin >> n;
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
for(int i=0; i < n; i++){
dp[i] = 1;
}
for (int i = 1; i < n; i++) {
for (int j = 0; j <= i; j++) {
if (arr[j] < arr[i]) {
dp[i] = max(dp[i], dp[j] + 1);
}
}
}
int ans = dp[0];
for (int i = 1; i < n; i++) {
if (ans < dp[i]) ans = dp[i];
}
cout << ans;
}
'๋ฐฑ์ค > C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค/C++] 13398๋ฒ ์ฐ์ํฉ 2 (0) | 2022.07.20 |
---|---|
[๋ฐฑ์ค/C++] 11054๋ฒ ๊ฐ์ฅ ๊ธด ๋ฐ์ดํ ๋ ๋ถ๋ถ ์์ด (0) | 2022.07.20 |
[๋ฐฑ์ค/C++] 5021๋ฒ ์์๊ณ์น (0) | 2022.07.18 |
[๋ฐฑ์ค/C++] 11057๋ฒ ์ค๋ฅด๋ง ์ (0) | 2022.07.18 |
[๋ฐฑ์ค/C++] 1939๋ฒ ์ค๋์ ํ (0) | 2022.07.18 |