0. 아이의 위치를 최소한으로 바꾸면서 순서를 정렬하는 방법 = 이미 정렬된 가장 긴 문자열을 찾고, 그 나머지를 이동하면 된다
- 가장 긴 증가하는 부분 수열(LIS)을 구하면 된다
1. DP를 통해 이전까지 진행한 결과들 중 현재 순서보다 작으면서 그 값이 제일 큰 값을 구한다
2. 해당 값 +1이 현재 지점까지의 LIS이다
3. LIS를 마지막까지 구한 후, 가장 큰 LIS 길이를 구한다
4. 해당 LIS에 속하지 않는 아이들을 이동하면 된다. 즉, (전체 아이 수 - LIS길이) = (이동해야하는 아이 수)
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main{
public static void main(String[] args)throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = pint(br.readLine());
int[] num = new int[N];
int[] dp = new int[N];
for (int i = 0; i < N; i++) {
num[i]=pint(br.readLine());
}
int lis=0;
for (int i = 0; i < N; i++) {
int max=0;
for (int j = 0; j < i; j++) {
if(num[j] < num[i] && max<dp[j])max=dp[j];
}
dp[i]=max+1;
lis = Math.max(dp[i], lis);
}
System.out.println(N-lis);
}
static int pint(String s) {
return Integer.parseInt(s);
}
}
'알고리즘 문제 풀이 > BOJ 골드' 카테고리의 다른 글
[백준] 4485 - 녹색 옷 입은 애가 젤다지? (0) | 2021.11.26 |
---|---|
[백준] 11758 - CCW (0) | 2021.11.15 |
[백준] 2470 - 두 용액 (0) | 2021.11.15 |
[백준] 1959 - 달팽이3 (0) | 2021.11.04 |
[백준] 16973 - 직사각형 탈출 (0) | 2021.11.04 |
[백준] 23288 - 주사위 굴리기 2 (0) | 2021.11.03 |
[백준] 19236 - 청소년 상어 (0) | 2021.11.03 |