티스토리 뷰

알고리즘

백준 1092

kOsari 2023. 7. 5. 18:50

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 출력

5. 아니라면 가장 큰 크레인 부터 시작해서 가장 작은 크레인 까지 반복

6. 현재 크레인이 옮길 수 있는 가장 큰 박스를 선택해 뺀다.

7. 만약 모든 크레인을 사용하면 시간을 더한다.

위의 작업을 반복해 문제를 해결 한다.

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Scanner;
import java.util.concurrent.atomic.AtomicBoolean;

public class test41 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        //크레인 입력
        int n = sc.nextInt();
        ArrayList<Integer> crain = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            crain.add(sc.nextInt());
        }

        //박스 입력
        int m = sc.nextInt();
        ArrayList<Integer> box = new ArrayList<>();
        for (int i = 0; i < m; i++) {
            box.add(sc.nextInt());
        }
        
        //정렬 내림차순으로
        Collections.sort(crain,Collections.reverseOrder());
        Collections.sort(box,Collections.reverseOrder());
        
        //출력 시간
        int time = 0;
        
        //만약 가장 큰 크레인이 가장 큰 박스를 옮길 수 없다면 모든 박스를 옮기지 못함
        //즉 -1 주고 끝
        if(crain.get(0)<box.get(0)){
            System.out.println(-1);
            return;
        }
        
        //박스가 빌때 까지
        //즉 박스 를 다 옮기면 끝
        while(!box.isEmpty()) {
            //박스의 순서
            int index =0;
            
            //크레인의 순서
            for(int i=0; i< n; ) {
                
                if(index == box.size()){ //모든 박스를 검색했으면 다음 크레인 선택
                    break;
                }else if(crain.get(i) >= box.get(index)) { //크레인이 박스를 옮길 수 있다면
                    box.remove(index); //박스를 지우고
                    i++; //크레인의 위치를 옮김
                }else {
                    index++; //불가능 하면 다음 박스를 검색
                }
            }
            time++; //시간추가
        }

        System.out.println(time);

    }
}

'알고리즘' 카테고리의 다른 글

백준 1373  (0) 2023.07.09
백준 1107  (0) 2023.07.09
백준 1083  (0) 2023.07.04
백준 1522  (0) 2023.07.03
백준 1359  (0) 2023.07.01
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
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
글 보관함