본문 바로가기
BOJ

[JAVA]백준 1092번 - 배

by yujinkimkim 2023. 7. 18.

1092번: 배 (acmicpc.net)

 

1092번: 배

첫째 줄에 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 각 크레인의 무게 제한이 주어진다. 이 값은 1,000,000보다 작거나 같다. 셋째 줄에는 박스의 수 M이 주어진다. M은 10,000보

www.acmicpc.net

문제에 있는 예제는 다 맞게 나오는데 틀렸습니다가 나와서 이제 질문게시판 보러 가야해요 ㅠ ㅠ

package baekjoon;

import java.util.*;
import java.io.*;

public class b1092 {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		int n = Integer.parseInt(br.readLine());
		StringTokenizer st = new StringTokenizer(br.readLine());
		Integer crane[] = new Integer[n];
		
		for(int i = 0 ; i < n ; i++)
			crane[i] = Integer.parseInt(st.nextToken());
		
		int m = Integer.parseInt(br.readLine());
		st = new StringTokenizer(br.readLine());
		Integer box[] = new Integer[m];
		
		for(int i = 0 ; i < m ; i++)
			box[i] = Integer.parseInt(st.nextToken());
			
		Arrays.sort(crane, Comparator.reverseOrder());
		Arrays.sort(box, Comparator.reverseOrder());
		
		int cnt = 0;
		int idx = 0;
		for(int i = 0 ; i < m ; i++)
		{
			if(box[i] > crane[idx])
			{
				i--;
				idx--;
				cnt++;
			}
			else
			{
				idx++;
			}
			
			if(i < 0 || idx < 0)
			{
				cnt = -1;
				break;
			}
			else if(idx % n == 0)
			{
				cnt++;
				idx = 0;
			}
			
			if(i == m-1 && box[i] <= crane[idx])
				cnt++;
		}
		
		bw.write(cnt+"");
		bw.close();
		
	}

}

근데 그도 그럴게 넘...if문으로 엄 상황별로 다 따져서 지저분한 느낌이긴 해요

3
10 6 5
11
6 8 9 6 8 6 9 6 8 6 9

이거 6나와야하는데 14 나오네용 레죵두..

for말고 while로 해서 위랑 비슷하게 하다가 예제별로 1 쁠마돼서 계속 어긋나길래 구냥 구글링했슴니당..

package baekjoon;

import java.util.*;
import java.io.*;

public class b1092 {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		int n = Integer.parseInt(br.readLine());
		StringTokenizer st = new StringTokenizer(br.readLine());
		Integer crane[] = new Integer[n];
		
		for(int i = 0 ; i < n ; i++)
			crane[i] = Integer.parseInt(st.nextToken());
		
		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()));
			
		Arrays.sort(crane, Comparator.reverseOrder());
		Collections.sort(box, Collections.reverseOrder());
		
		int cnt = 0;
		
		if(box.get(0) > crane[0]) 
		{
            bw.write(-1+"");
            bw.close();
            return;
        }
		
		 while(!box.isEmpty()) 
		 {
	            int idx =0;
	            for(int i=0; i< n; ) 
                {
	            	
	                if(idx == box.size()) 
	                	break;
	                else if(crane[i] >= box.get(idx)) 
	                {
	                    box.remove(idx);
	                    i++;
	                }
	                else idx++;
	            }
	            cnt++;
	        }

		
		bw.write(cnt+"");
		bw.close();
		
	}

}

코드 완죤 예술이네요...

제가 하고 싶은 느낌 딱 완전 제대로에요

본받고 열심히 하겠슴니다

[백준] 1092번 배 (자바 풀이) (tistory.com)

 

[백준] 1092번 배 (자바 풀이)

문제 https://www.acmicpc.net/problem/1092 1092번: 배 첫째 줄에 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 각 크레인의 무게 제한이 주어진다. 이 값은 1,000,000보다 작거나 같다. 셋째

code-lab1.tistory.com

'BOJ' 카테고리의 다른 글

[JAVA] 백준 5107번 - 마니또  (2) 2023.07.20
[JAVA]백준 1043번 - 거짓말  (2) 2023.07.20
[JAVA]백준 1068번 - 트리  (2) 2023.07.17
[JAVA]백준 1956번 - 운동  (2) 2023.07.16
[JAVA]백준 6198번 - 옥상 정원 꾸미  (2) 2023.07.15

댓글