반응형

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

 

7570번: 줄 세우기

입력은 2 개의 줄로 이루어져 있다. 첫 줄에는 어린이 수를 나타내는 정수가 주어진다. 둘째 줄에는 처음에 줄서있는 어린이들의 번호가 차례대로 주어진다. 주어진 번호들 사이에는 공백이 하

www.acmicpc.net

 

아이들을 번호순으로 오름차순 정렬시키는데 필요한 최소 이동 횟수를 구해야합니다.

아이들은 맨 앞 또는 맨 뒤로만 이동할 수 있고, 이미 세워진 아이들 중 일부는 이미 오름차순으로 정렬된 상태에 있습니다.

그러므로 주어진 번호에서 가장 긴 1씩 증가하는 연속된 부분 수열의 길이를 구해주면, 이 아이들은 이미 오름차순으로 정렬되어있으므로 그 순서를 유지해도 됩니다.

따라서, (전체 아이의 수 - 가장 긴 1씩 증가하는 연속된 부분 수열의 길이)번 만큼 아이들을 이동시켜주면 됩니다.

 

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

int n, a, m = 0, dp[1000001] = { 0 };

int main() {
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		scanf("%d", &a);
		dp[a] = dp[a - 1] + 1;
		m = max(m, dp[a]);
	}
	printf("%d", n - m);
}
반응형

'Algorithm' 카테고리의 다른 글

백준 9252 : LCS 2  (0) 2021.11.18
백준 12852 : 1로 만들기 2  (0) 2021.11.18
백준 2631 : 줄 세우기  (0) 2021.11.18
백준 2098 : 외판원 순회  (0) 2021.11.18
백준 1311 : 할 일 정하기 1  (0) 2021.11.18

+ Recent posts