728x90

https://www.acmicpc.net/problem/2631

 

2631번: 줄세우기

KOI 어린이집에는 N명의 아이들이 있다. 오늘은 소풍을 가는 날이다. 선생님은 1번부터 N번까지 번호가 적혀있는 번호표를 아이들의 가슴에 붙여주었다. 선생님은 아이들을 효과적으로 보호하기 위해 목적지까지 번호순서대로 일렬로 서서 걸어가도록 하였다. 이동 도중에 보니 아이들의 번호순서가 바뀌었다. 그래서 선생님은 다시 번호 순서대로 줄을 세우기 위해서 아이들의 위치를 옮기려고 한다. 그리고 아이들이 혼란스러워하지 않도록 하기 위해 위치를 옮기는 아이들의

www.acmicpc.net

LIS(Longest Increasing Sequence)를 구하고 N에서 LIS를 빼주면 된다.

#include <iostream>
#include <vector>
using namespace std;

int main() {
	cin.tie(NULL);
	int n;
	cin >> n;
	vector<int> v(n);
	for (int i = 0; i < n; i++) {
		cin >> v[i];
	}
	vector<int> dp(n);
	dp[0] = 1;
	int lis = 0;
	for (int i = 1; i < n; i++) {
		int maxDp = 0;
		for (int j = 0; j < i; j++) {
			if (dp[j] > maxDp && v[j] < v[i]) {
				maxDp = dp[j];
			}
		}
		dp[i] = maxDp + 1;
		if (dp[i] > lis)
			lis = dp[i];
	}
	cout << n - lis;
	return 0;
}
728x90

'알고리즘 문제' 카테고리의 다른 글

[백준] 2225 합분해  (0) 2020.03.16
[백준] 2096번 내려가기  (0) 2020.03.15
[백준] 9084번 동전  (0) 2020.03.14
[백준] 1937번 욕심쟁이 판다  (0) 2020.03.14
[백준] 3036번 링  (0) 2020.03.13

+ Recent posts