[백준] 1092번 배 JAVA 풀이

권용환·2021년 11월 24일
0

백준

목록 보기
27/36
post-thumbnail

문제 바로가기

나의 풀이

crane이 들 수 있는 무게와 box의 무게들을 모두 ArrayList에 저장하였다. 더 이상 box들을 들 수 없는 crane이나 이미 배에 적재한 box는 제거해주기 위함이었다.

두 list를 역순으로 정렬해주었고 crane이 들 수 있는 무게 중 가장 큰 값이 box의 무게 중 가장 큰 값보다 작으면 -1을 반환하고 바로 종료하였다.

이후 crane을 한번 순회할 때마다 answer 값을 1씩 증가시켜주는데 여기서 box가 제거되다보니 분명히 crane이 더이상 쓸모없는 경우가 나오게되는데 이때는 subList를 활용하여 쓸모없는 crane을 죄다 list에서 제거해버렸다.


나의 코드

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

class Main {

    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int answer = 1;
        List<Integer> crane = new ArrayList<>();
        List<Integer> box = new ArrayList<>();

        int n = Integer.parseInt(br.readLine());
        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());
        st = new StringTokenizer(br.readLine());
        for (int i = 0; i < m; i++) {
            box.add(Integer.parseInt(st.nextToken()));
        }

        Collections.sort(crane, Comparator.reverseOrder());
        Collections.sort(box, Comparator.reverseOrder());

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

        while (!box.isEmpty()) {
            Loop1:
            for (int i = 0; i < crane.size(); i++) {
                int craneWeight = crane.get(i);
                int boxIndex = 0;
                while (craneWeight < box.get(boxIndex)) {
                    boxIndex++;
                    if (boxIndex == box.size()) {
                        crane = crane.subList(0, i);
                        break Loop1;
                    }
                }
                box.remove(boxIndex);
                if (box.isEmpty()) {
                    System.out.println(answer);
                    return;
                }
            }
            answer++;
        }

        System.out.println(answer);
    }
}
profile
마구 낙서하는 블로그입니다

0개의 댓글