반응형
이 문제는 정렬을 이용하여 모든 박스를 옮기는 데 걸리는 시간을 구하는 문제입니다.
이 문제를 풀기 위해서는 입력받은 데이터들을 모두 내림차순으로 정렬합니다.
그 후 가장 무거운 무게를 들 수 있는 크레인부터 차례대로 박스를 옮기는 것을 시도합니다.
크레인이 박스를 옮기는 것을 성공하였으면 그 크레인은 이미 사용하였으므로 다음으로 무거운 무게를 들 수 있는 크레인을 이용하여 다음 박스를 옮깁니다.
그리고 그 크레인이 박스를 옮길 수 없다면 그다음 박스를 같은 크레인으로 옮기는 것을 시도합니다.
그리고 마지막 박스까지 순회를 마치거나 모든 크레인을 사용하였다면 다시 가장 무거운 무게를 옮길 수 있는 크레인을 이용합니다.
이 과정을 모든 박스를 옮길 때까지 반복합니다.
import java.io.*;
import java.util.*;
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 = new ArrayList<>();
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i = 0; i<N; i++)
crane.add(Integer.parseInt(st.nextToken()));
int M = Integer.parseInt(br.readLine());
List<Integer> box = new ArrayList<>();
st = new StringTokenizer(br.readLine());
for(int i = 0; i<M; i++)
box.add(Integer.parseInt(st.nextToken()));
//내림차순으로 정렬
crane.sort(Collections.reverseOrder());
box.sort(Collections.reverseOrder());
if(crane.get(0)<box.get(0)){
System.out.println(-1);
return;
}
int day = 0;
while(!box.isEmpty()){
int boxIdx = 0, craneIdx = 0;
while(craneIdx<N){
if(boxIdx == box.size())
break;
else if(crane.get(craneIdx) >= box.get(boxIdx)){
box.remove(boxIdx);
craneIdx++;
}
else
boxIdx++;
}
day++;
}
System.out.println(day);
}
}
반응형
'알고리즘 > 그리디 알고리즘' 카테고리의 다른 글
백준 1080번 : 행렬 java (0) | 2022.08.14 |
---|---|
백준 12904번 : A와 B java (0) | 2022.08.11 |
백준 2212번 : 센서 java (0) | 2022.08.09 |
백준 2437번 : 저울 java (0) | 2022.08.08 |
백준 1744번 : 수 묶기 java (0) | 2022.08.05 |
댓글