https://www.acmicpc.net/problem/1092
1092번: 배
첫째 줄에 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 각 크레인의 무게 제한이 주어진다. 이 값은 1,000,000보다 작거나 같다. 셋째 줄에는 박스의 수 M이 주어진다. M은 10,000보
www.acmicpc.net
문제
풀이
단순 그리디 접근 방법으로 풀 수 있다.
1. 상자랑 크레인을 입력받아 무거운 순 으로 정렬
2. 크레인 갯수 만큼 상자를 순회하여 만약 크레인이 이 상자를 적재 가능하면 상자리스트에서 제거
3. 다음 크레인으로 상자를 순회하여 적재가능하면 또 제거 .. 이런식으로 반복
4. 크레인을 순회할때마다 시간1초씩 늘려주고 , 상자리스트가 is.Empty()면 끝
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
import java.util.*;
import java.io.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
List<Integer> crane = Arrays.stream(br.readLine().split(" "))
.mapToInt(Integer::parseInt).boxed().collect(Collectors.toList());
int m = Integer.parseInt(br.readLine());
List<Integer> box = Arrays.stream(br.readLine().split(" "))
.mapToInt(Integer::parseInt).boxed().collect(Collectors.toList());
// end input
crane.sort(Comparator.reverseOrder());box.sort(Comparator.reverseOrder());
int sec=0;
if(box.get(0)>crane.get(0)){
System.out.println(-1);
return;
}
while(!box.isEmpty()){
sec++;
for (Integer curCrane : crane) {
for(int i=0;i<box.size();i++){
if(curCrane>=box.get(i)){
box.remove(i);
break;
}
}
}
}
System.out.println(sec);
}
}
|
cs |
'알고리즘,PS > 백준' 카테고리의 다른 글
[BOJ] 백준 [11497] 통나무 건너뛰기JAVA (0) | 2021.10.30 |
---|---|
[BOJ] 백준 [13904] 과제JAVA (0) | 2021.10.29 |
[BOJ] 백준 [9576] 책 나눠주기JAVA (0) | 2021.10.28 |
[BOJ] 백준 [1202] 보석 도둑JAVA (0) | 2021.10.26 |
[BOJ] 백준 [1744] 수 묶기JAVA (0) | 2021.10.26 |