반응형
https://www.acmicpc.net/problem/2631
소스코드
package Baekjoon.DP;
import java.io.*;
import java.util.*;
class P2631 {
public static void main(String[] args)throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine());
int[] arr = new int[N];
int[] dp = new int[N];
for (int i=0; i<N; i++) {
arr[i] = Integer.parseInt(br.readLine());
}
for (int i=0; i<N; i++) {
dp[i] = 1;
for (int j=0; j<i; j++) {
if (arr[i] > arr[j]) {
dp[i] = Math.max(dp[i],dp[j]+1);
}
}
}
sb.append(N - Arrays.stream(dp).max().getAsInt());
System.out.println(sb);
}
}
풀이
★ 일반적인 LIS(Longest Increasing Subsequence, 최장 증가 수열)을 활용하는 문제입니다. 문제에서 주어진 수열을 가지고 예시를 들어보면, 3 7 5 2 6 1 4 이라는 값 중, 최장 증가 수열은 3, 5, 6인 것을 알 수 있습니다. 그럼 3, 5, 6은 고정되어 있고, 나머지 수인 7,2,1,4만 움직여서 주어진 수열을 오름차순 정렬할 수 있습니다.
★ 최종적으로는 LIS 중 가장 긴 값을 찾아주고, 전체 값인 N에서 LIS를 빼준 값을 출력해주면 됩니다:)
반응형
'Algorithm > 백준' 카테고리의 다른 글
[백준 알고리즘] 1268번: 임시 반장 정하기 (JAVA) (0) | 2024.02.14 |
---|---|
[백준 알고리즘] 7570번: 줄 세우기 (JAVA) (0) | 2024.02.13 |
[백준 알고리즘] 10999번: 구간 합 구하기 2 (JAVA) (0) | 2024.02.06 |
[백준 알고리즘] 11505번: 구간 곱 구하기 (JAVA) (1) | 2024.02.02 |
[백준 알고리즘] 2042번: 구간 합 구하기 (JAVA) (0) | 2024.02.02 |