코딩테스트/백준

[BOJ 1092] 배 (G5)

34suuuuu 2024. 12. 28. 17:22

📍 문제 

https://www.acmicpc.net/problem/1092

 

📍 문제 풀이

 

박스를 옮기는데 걸리는 최소 시간을 구해야하기 때문에

크레인의 무게 제한과 박스의 무게들을 모두 내림차순으로 정렬해야한다. 

오름차순으로해도 해결을 할 수 있겠지만 조금 더 복잡해지지 않을까..?

 

현재 크레인에 박스를 담을 수 있다면, 

해당 박스를 제거하고 다음 크레인을 탐색 시작

박스를 옮겨 담을 수 없다면, 한단계 가벼운 무게의 박스를 담을 수 있는지 확인

 

하지만 예외 사항으로, `크레인의 최대 무게 제한 < 박스의 최대 무게` 라면

옮겨 담을 수 없기 때문에 `-1` 출력

 

📍 전체 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.StringTokenizer;

public class boj_1092 {
	static List<Integer> cranes;
	static List<Integer> boxes;

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		cranes = new ArrayList<>();
		boxes = new ArrayList<>();

		int n = Integer.parseInt(br.readLine());
		StringTokenizer st = new StringTokenizer(br.readLine());
		for (int i = 0; i < n; i++) {
			cranes.add(Integer.parseInt(st.nextToken()));
		}

		int m = Integer.parseInt(br.readLine());
		st = new StringTokenizer(br.readLine());
		for (int i = 0; i < m; i++) {
			boxes.add(Integer.parseInt(st.nextToken()));
		}

		Collections.sort(cranes, Collections.reverseOrder());
		Collections.sort(boxes, Collections.reverseOrder());

		if (cranes.get(0) < boxes.get(0)) {
			System.out.println(-1);
			return;
		}

		int time = 0;
		while (!boxes.isEmpty()) {
			int idx = 0;
			for (int i = 0; i < cranes.size(); i++) {
				if(idx == boxes.size()) break;
				else if (cranes.get(i) >= boxes.get(idx)) {
					boxes.remove(idx);
				} else {
					idx++;
					i--;
				}
			}
			time++;
		}
		System.out.println(time);
	}
}