문제 풀이 및 개발 공간

[백준] 1092번 배 (gold 5 본문

백준공부/java

[백준] 1092번 배 (gold 5

gomduri43 2023. 10. 5. 22:17

전에 업로드한 문제 코드 이지만, 이번에 작성한게 차이가 클 정도로 훨씬 효율적이라 코드만 재업로드 하려 한다.

//이번
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));
        BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st;
        int n=Integer.valueOf(br.readLine());
        int[] num=new int[n];
        st=new StringTokenizer(br.readLine());
        for(int i=0; i<n; i++){
            num[i]=Integer.valueOf(st.nextToken());
        }
        Arrays.sort(num);
        int[] carry=new int[n];

        int m=Integer.valueOf(br.readLine());
        st=new StringTokenizer(br.readLine());
        PriorityQueue<Integer >que= new PriorityQueue<>(Collections.reverseOrder());
        for(int i=0; i<m; i++){
            que.offer(Integer.valueOf(st.nextToken()));
        }

        if(num[n-1]<que.peek()){
            bw.write("-1");
        }
        else{
            boolean go=true;
            while(true){
                go=true;
                if(!que.isEmpty()) {
                    que.poll();
                    carry[n - 1]++;
                }
                else{
                    break;
                }
                for(int i=n-2; i>=0; i--){
                    int temp=carry[n-1]-carry[i];
                    for(int j=0; j<temp; j++){
                        if(!que.isEmpty() && que.peek() <= num[i]){
                            carry[i]++;
                            que.poll();
                        }
                        else{
                            go=false;
                            break;
                        }
                    }
                    if(!go){
                        break;
                    }
                }
            }
            bw.write(carry[n-1]+"");
        }
        bw.flush();
    }
}







//저번
import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.StringTokenizer;
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st;
        int n = Integer.parseInt(br.readLine());
        ArrayList<Integer> crane = new ArrayList<>();
        st = new StringTokenizer(br.readLine());
        //크레인 저장,
        for (int i = 0; i < n; i++) {
            crane.add(Integer.parseInt(st.nextToken()));
        }
        Collections.sort(crane);
        //화역물
        int m = Integer.parseInt(br.readLine());
        st = new StringTokenizer(br.readLine());
        ArrayList<Integer> box = new ArrayList<>();
        for (int i = 0; i < m; i++) {
            box.add(Integer.parseInt(st.nextToken()));
        }
        //화역물 정렬
        Collections.sort(box);

        int total=0;
        if (box.get(box.size()-1) > crane.get(crane.size()-1)) {
            bw.write(-1 + "");
            bw.flush();
        }
        else{
            while(true) {
                int j=box.size()-1;
                if(j==-1){
                    break;
                }
                for (int i = (crane.size() - 1); i >= 0; i--) {
                    for (; j >= 0; ) {
                        if (crane.get(i) >= box.get(j)) {
                            box.remove(j);
                            j-=1;
                            break;
                        }
                        else{
                            j--;
                        }

                    }
                }
                total++;
            }
            bw.write(total+"");
            bw.flush();
        }


    }
}

가장 큰 차이는 전에는 무게값이 높은 크레인 부터 낮을때까지 하나씩 빼오고 하나씩 또 쭉 빼면서 계속 반복문을 수행했으나,

이번에는 가장 큰 무게값이 빼온 값만큼, 밑에서 빼오도록 시키면서 점점 박스의 수를 없앴다.

'백준공부 > java' 카테고리의 다른 글

[백준] 1500번 최대 곱 (silver 2  (0) 2023.10.06
[백준] 5567번 결혼식 (silver 2  (0) 2023.10.06
[백준] 4158번 CD (silver 5  (0) 2023.10.05
[백준] 1026번 보물 (silver 4  (0) 2023.10.05
[백준] 1987번 알파벳 (gold 4  (0) 2023.10.05