알고리즘/백준

[백준 2631] 줄세우기 C++

겜도리도리 2021. 9. 25. 23:55
반응형

문제

백준 2631

 

2631번: 줄세우기

KOI 어린이집에는 N명의 아이들이 있다. 오늘은 소풍을 가는 날이다. 선생님은 1번부터 N번까지 번호가 적혀있는 번호표를 아이들의 가슴에 붙여주었다. 선생님은 아이들을 효과적으로 보호하기

www.acmicpc.net

풀이

먼저 LIS (최장 증가 부분 수열)을 구합니다.

LIS에 해당하지 않은 원소를 옮겨주면 되므로 n-LIS가 답이 됩니다.

소스 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
 
int dp[201];
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
 
    // 입력
    int n;
    cin >> n;
    int LIS = 0;
    vector<int> v;
    v.push_back(0);
    for (int i = 0; i < n; i++) {
        int num;
        cin >> num;
        v.push_back(num);
    }
 
    // LIS 구하기
    for (int i = 1; i < v.size(); i++) {
        int temp = 0;
        for (int j = 0; j < i; j++) {
            if (v[j] < v[i]) {
                temp = max(dp[j], temp);
            }
        }
        dp[i] = temp + 1;
        LIS = max(LIS, dp[i]);
    }
 
    cout << n - LIS << endl;
    return 0;
}
cs
반응형

'알고리즘 > 백준' 카테고리의 다른 글

[백준 2981] 검문 C++  (0) 2021.09.26
[백준 14226] 이모티콘 C++  (0) 2021.09.26
[백준 2470] 두 용액 C++  (0) 2021.09.25
[백준 15686] 치킨 배달 C++  (0) 2021.09.18
[백준 11051] 이항 계수 2 C++  (0) 2021.09.16