[BOJ 18353] 병사 배치하기 (Java, DP, LIS)알고리즘/동적 프로그래밍2023. 6. 30. 21:53
Table of Contents
반응형
문제 링크
https://www.acmicpc.net/problem/18353
문제 풀이
- DP, LIS (Longest Incresing Subsequence, 최장 증가 부분 수열)
- 시간 복잡도 O(N^2)
- 단순히 LIS 최대 길이를 구한 후 N과 차이를 구하면 되는 문제라서 DP 배열을 순차적으로 갱신 해준다
(1) 입력된 배열을 reverse함
(2) DP 배열을 1로 초기화함 (숫자 자신을 가르킴)
(3) 순차 조회하면서 앞에 숫자 중에 자기보다 작은 숫자가 있으면 갱신
reverse | 4 | 2 | 5 | 8 | 4 | 11 | 15 |
DP | 1 | 1 | 2 | 3 | 2 | 4 | 5 |
제출 코드
import java.util.*;
import java.io.*;
public class Main {
static int N;
static int[] DP;
static List<Integer> DATA = new ArrayList<>();
static void input() throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i = 0; i < N; i++) {
DATA.add(Integer.parseInt(st.nextToken()));
}
br.close();
}
static void pro() {
Collections.reverse(DATA);
DP = new int[N];
Arrays.fill(DP, 1);
for(int i = 1; i < N; i++) {
for(int j = 0; j < i; j++) {
if(DATA.get(i) > DATA.get(j)) DP[i] = Math.max(DP[i], DP[j] + 1);
}
}
int maxValue = Arrays.stream(DP).max().getAsInt();
System.out.println(N - maxValue);
}
public static void main(String[] args) throws Exception {
input();
pro();
}
}
반응형
'알고리즘 > 동적 프로그래밍' 카테고리의 다른 글
[BOJ 1149] RGB거리 (Java, DP) (0) | 2023.07.03 |
---|---|
[BOJ 14002] 가장 긴 증가하는 부분 수열 (Java, DP, LIS) (0) | 2023.06.30 |
[BOJ 10844] 쉬운 계단 수 (Java, DP) (0) | 2023.06.30 |
[BOJ 1463] 1로 만들기 (Java, DP) (0) | 2023.06.30 |
[BOJ 2156] 포도주 시식(Java, DP) (0) | 2023.06.30 |
@leejinwoo1126 :: 천천히 하나씩
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!