https://www.acmicpc.net/problem/2631
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
public class Main {
static int[] nums;
int[] dp;
public int getMinNum() {
int max = 0;
dp = new int[nums.length];
Arrays.fill(dp, 1);
for(int i = 1; i < nums.length; i++) {
for(int j = 0; j < i; j++) {
if(nums[j] < nums[i]) {
dp[i] = Math.max(dp[i], dp[j] + 1);
}
}
max = max < dp[i] ? dp[i] : max;
}
return nums.length - max;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int people_num = Integer.parseInt(br.readLine());
nums = new int[people_num];
for(int i = 0; i < people_num; i++) {
nums[i] = Integer.parseInt(br.readLine());
}
br.close();
Main m = new Main();
bw.write(m.getMinNum() + "\n");
bw.flush();
bw.close();
}
}
for(int i = 0; i < n; i++) {
length[i] = 1;
for(int j = 0; j < i; j++) {
if(arr[j] < arr[i]) {
length[i] = max(length[i], length[j] + 1);
}
}
}
j번째 인덱스에서 끝나는 LIS의 마지막에 arr[i]를 추가했을 때의 LIS 길이와 추가하지 않은 기존의 length[i] 값 중 더 큰 값으로 length[i] 값을 업데이트합니다.
LIS 알고리즘을 이용하여 현재 주어진 숫자들의 순서에서 LIS의 길이를 구하여 이동시키지 않는 아이들의 수를 구한 후에, 그 아이들을 제외한 아이들을 이동시키면 옮겨지는 아이들의 최소 수를 구할 수 있습니다.