해결
전투력이 높은 순서대로 배열을 설정하기 위해 몇몇의 병사들을 제거하여 이를 설정하려고 하는데, 최대한 병사를 적게 줄여야한다.
전투력이 15 11 4 8 5 2 4라고 가정하자.
뒤에서부터 DP를 적용한다.
- 전투력이 4인 병사에서 살릴 수 있는 병사의 수는 1이다.
- 전투력이 2인 병사에서 4보다 작으므로 살릴 수 있는 병사의 수는 1이다.
- 전투력이 5인 병사에서 2보다 크므로 병사 2에서 살릴수 있는 병수+1이고 마찬가지로 4에도 적용된다.
즉, 로직을 보면 뒤부터 진행을 하는데 이미 처리한 병사들 중 현재 전투력보다 작다면 해당 병사가 갖는 최대 병사+1 처리를 해주면 된다.
코드
import java.util.*;
public class Q4 {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
List<Integer> soldiers = new ArrayList<>();
for(int i=0; i<n; i++){
soldiers.add(sc.nextInt());
}
int[] dp = new int[n];
Arrays.fill(dp, 1);
int max_value = 1;
for(int i=n-2; i>=0; i--){
for(int j=i+1; j<n; j++){
if(soldiers.get(j) < soldiers.get(i)){
dp[i] = Math.max(dp[i], dp[j]+1);
max_value = Math.max(max_value, dp[i]);
}
}
}
System.out.println(n-max_value);
}
}
'Algorithm > Practice' 카테고리의 다른 글
이코테 - 편집거리 with JAVA (0) | 2023.09.18 |
---|---|
이코테 - 못생긴 수 with JAVA (0) | 2023.09.15 |
이코테 - 퇴사 with JAVA (0) | 2023.09.13 |
이코테 - 효율적인 화폐 구성 with JAVA (0) | 2023.09.12 |
Programmers - 가사 검색 with JAVA (0) | 2023.09.07 |