์ค๋ฒ1 : ๋์ ๊ณํ๋ฒ ๋ฌธ์ ์ด๋ค.
max_element ์ต๋ํ ์ฐ์ง ๋ง์. ๊ทธ๋ฆฌ๊ณ sizeof๋ ๋ฐ์ดํธ์๋ฅผ ๋ฆฌํดํด์ค๋ค. ์ ๋ฐ..ใ ใ
Code1
dp[n] = n๋ฒ์งธ ์ ๊น์ค์ ํฌํจํ ์ํ๋ก ๊ฐ์ง ์ ์๋ ์ต๋ ์ ๊น์ค ๊ฐฏ์
dp[n] = max(dp[1~n-1] + 1)
#include <iostream>
#include <algorithm>
using namespace std;
int N;
int M = 0;
int map[501] = {0,};
int dp[501] = {0,};
int ans = -1;
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> N;
for (int i = 0; i < N; i++) {
int a, b;
cin >> a >> b;
map[a] = b;
dp[a] = 1;
M = max(M, a);
}
for (int i = 1; i <= M; i++) {
for (int j = 1; j < i; j++) {
if (map[i] < map[j] || dp[i] == 0) {
continue;
} else {
if (dp[i] < dp[j]+1) {
dp[i] = dp[j]+1;
}
}
}
}
for (int i = 0; i <= M; i++) {
ans = max(ans, dp[i]);
}
cout << N-ans << '\n';
return 0;
}
Code2
8 2 9 1 4 6 7 10
2 4 6 7 10
๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด(LIS)๋ก ํ ์๋ ์๋ค. ์์ ์ ๊ณ ๋ฑํ๊ต ๋ ํจ์ ๊ฐ์ ์ฐพ๋ ๋ฌธ์ ๊ฐ ์๋ค. ์น์ญ ๋ถ๋ถ์์ ์ ์์ญ ์์๋งํผ์ ๊ฐ์๋ฅผ ๋ฝ์์ฃผ๊ฒ๋๋ฉด ์์ฐ์ค๋ ์ํ๋ ํจ์๊ฐ ๋ง๋ค์ด์ง๋ค. ์ฝ๊ฐ ๊ทธ ๋๋๊ณผ ๋น์ทํ๋ฐ, ํด๋น ๋ชจ์์์ ๋ต์ธ ์ํฉ์ 1 4 6 7 10
๋๋ 2 4 6 7 10
๊ณผ ๊ฐ์ ์ํฉ์ด๋ค. ํน์ง์ ์ดํด๋ณด๋ฉด ๊ฐ์ด ์ฆ๊ฐํ๊ณ ์๋ค. ๊ฐ๊ฐ์ A ์ ๋ด๋์์ ๊ฐ๋ฆฌํค๋ B ๊ฐ๋ค ์ค์์ ์ฆ๊ฐํ๋ ์์ด ์ค ๊ฐ์ฅ ๊ธด ๊ฒ์ ์ฐพ๋๋ค๋ฉด, ๊ทธ๊ฒ์ด ์ต๋ ์ ๊น์ค์ ๊ฐ์์ผ ๊ฒ์ด๋ค.
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int N;
int dp[101];
vector<pair<int, int>> input;
bool compare(pair<int, int> a, pair<int, int> b){
return a.first < b.first;
}
int main(){
cin >> N;
input.push_back(make_pair(0, 0));
for (int i = 1; i <= N; i++) dp[i] = 1;
for (int i = 0; i < N; i++) {
int a, b;
cin >> a >> b;
input.push_back(make_pair(a, b));
}
sort(input.begin(), input.end(), compare);
for (int i = 1; i <= N; i++) {
for (int j = 1; j < i; j++) {
if (input[i].second > input[j].second) {
dp[i] = max(dp[i], dp[j]+1);
}
}
}
int ans = -1;
for (int i = 1; i <= N; i++) {
ans = max(ans, dp[i]);
}
cout << N-ans << '\n';
return 0;
}