Skip to content

Commit b665b40

Browse files
committed
[Silver II] Title: 병사 배치하기, Time: 164 ms, Memory: 14836 KB -BaekjoonHub
1 parent 94e2b2d commit b665b40

File tree

2 files changed

+73
-0
lines changed

2 files changed

+73
-0
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# [Silver II] 병사 배치하기 - 18353
2+
3+
[문제 링크](https://www.acmicpc.net/problem/18353)
4+
5+
### 성능 요약
6+
7+
메모리: 14836 KB, 시간: 164 ms
8+
9+
### 분류
10+
11+
다이나믹 프로그래밍, 가장 긴 증가하는 부분 수열: O(n log n)
12+
13+
### 제출 일자
14+
15+
2024년 12월 9일 12:40:51
16+
17+
### 문제 설명
18+
19+
<p><em>N</em>명의 병사가 무작위로 나열되어 있다. 각 병사는 특정한 값의 전투력을 보유하고 있으며, 병사를 배치할 때는 전투력이 높은 병사가 앞쪽에 오도록 내림차순으로 배치를 하고자 한다. 다시 말해 앞쪽에 있는 병사의 전투력이 항상 뒤쪽에 있는 병사보다 높아야 한다.</p>
20+
21+
<p>또한 배치 과정에서는 특정한 위치에 있는 병사를 열외시키는 방법을 이용한다. 그러면서도 남아있는 병사의 수가 최대가 되도록 하고 싶다.</p>
22+
23+
<p>예를 들어, <em>N</em>=7일 때 나열된 병사들의 전투력이 다음과 같다고 가정하자.</p>
24+
25+
<p style="text-align: center;"><img alt="" src="https://upload.acmicpc.net/d8a7b6e4-7524-42b0-841b-419dc0386ba4/-/preview/" style="width: 730px; height: 86px;"></p>
26+
27+
<p style="text-align: justify;">이 때 3번 병사와 6번 병사를 열외시키면, 다음과 같이 남아있는 병사의 수가 내림차순의 형태가 되며 5명이 된다. 이는 남아있는 병사의 수가 최대가 되도록 하는 방법이다.</p>
28+
29+
<p style="text-align: center;"><img alt="" src="https://upload.acmicpc.net/675a238f-f754-458f-92a6-c98c2d801d1a/-/preview/" style="height: 87px; width: 560px;"></p>
30+
31+
<p style="text-align: justify;">병사에 대한 정보가 주어졌을 때, 남아있는 병사의 수가 최대가 되도록 하기 위해서 열외해야 하는 병사의 수를 출력하는 프로그램을 작성하시오.</p>
32+
33+
### 입력
34+
35+
<p>첫째 줄에 <em>N</em>이 주어진다. (1 ≤ <em>N </em>≤ 2,000) 둘째 줄에 각 병사의 전투력이 공백을 기준으로 구분되어 차례대로 주어진다. 각 병사의 전투력은 10,000,000보다 작거나 같은 자연수이다.</p>
36+
37+
### 출력
38+
39+
<p>첫째 줄에 남아있는 병사의 수가 최대가 되도록 하기 위해서 열외해야 하는 병사의 수를 출력한다.</p>
40+
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import java.io.*;
2+
import java.util.*;
3+
4+
public class Main {
5+
6+
public static void main(String[] args) throws IOException {
7+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
8+
9+
10+
int N = Integer.parseInt(br.readLine());
11+
12+
ArrayList<Integer> arr = new ArrayList<>();
13+
int dp[] = new int[N+1];
14+
StringTokenizer st = new StringTokenizer(br.readLine());
15+
for(int i =0; i<N; i++) {
16+
arr.add(Integer.parseInt(st.nextToken()));
17+
dp[i] = 1;
18+
}
19+
20+
Collections.reverse(arr);
21+
22+
int max = 0;
23+
for(int i =0; i<N; i++) {
24+
for(int j = 0; j<i; j++) {
25+
if(arr.get(i) > arr.get(j) )
26+
dp[i] = Math.max(dp[i], dp[j]+1);
27+
}
28+
max = Math.max(max,dp[i]);
29+
}
30+
31+
System.out.println(N -max);
32+
}
33+
}

0 commit comments

Comments
 (0)