본문 바로가기
코딩테스트

[백준] 1092번 '배' - Java

by CuckooBird 2023. 7. 18.

문제

 


코드

맞았습니다가 뜬 코드입니다. - 메모리 16592KB | 시간 340ms | 코드 길이 1322B

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

public class Main {
	private static final BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
	private static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
	
	public static void main(String[] args) throws IOException {
		int n = Integer.parseInt(bf.readLine());
		ArrayList<Integer> n_arr = new ArrayList<>();
		
		StringTokenizer st = new StringTokenizer(bf.readLine());
		for(int i = 0 ; i < n ; i++) {
			n_arr.add(Integer.parseInt(st.nextToken()));
		}
		Collections.sort(n_arr, Collections.reverseOrder());
		
		int m = Integer.parseInt(bf.readLine());
		ArrayList<Integer> m_arr = new ArrayList<>();
		
		st = new StringTokenizer(bf.readLine());
		for(int i = 0 ; i < m ; i++) {
			m_arr.add(Integer.parseInt(st.nextToken()));
		}
		Collections.sort(m_arr, Collections.reverseOrder());
		
		if(n_arr.get(0) < m_arr.get(0)) {
			bw.write("-1");
		} else {
			int ans = 0;
			while(!m_arr.isEmpty()) {
				int idx = 0;
				for(int i = 0 ; i < n_arr.size() ; ) {
					if(idx == m_arr.size()) break;
					else if(n_arr.get(i) >= m_arr.get(idx)) {
						m_arr.remove(idx);
						i ++;
					} 
					else idx ++;
				}
				ans ++;
			}			
			bw.write(Integer.toString(ans));
		}
		bf.close();
		bw.flush();
		bw.close();
	}
}

 

Try1. 시간 초과가 뜬 코드입니다. - 코드 길이 1299B

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

public class Main {
	private static final BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
	private static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
	
	public static void main(String[] args) throws IOException {
		int n = Integer.parseInt(bf.readLine());
		ArrayList<Integer> n_arr = new ArrayList<>();
		
		StringTokenizer st = new StringTokenizer(bf.readLine());
		for(int i = 0 ; i < n ; i++) {
			n_arr.add(Integer.parseInt(st.nextToken()));
		}
		Collections.sort(n_arr, Collections.reverseOrder());
		
		int m = Integer.parseInt(bf.readLine());
		ArrayList<Integer> m_arr = new ArrayList<>();
		
		st = new StringTokenizer(bf.readLine());
		for(int i = 0 ; i < m ; i++) {
			m_arr.add(Integer.parseInt(st.nextToken()));
		}
		Collections.sort(m_arr, Collections.reverseOrder());
		
		if(n_arr.get(0) < m_arr.get(0)) {
			bw.write("-1");
			return;
		}
		
		int ans = 0;
		while(!m_arr.isEmpty()) {
			for(int i = 0 ; i < n_arr.size() ; i++) {
				for(int j = 0 ; j < m_arr.size() ; j++) {
					if(n_arr.get(i) >= m_arr.get(j)) {
						m_arr.remove(j);
						break;
					}
				}
			}
			ans ++;
		}
		
		
		bw.write(Integer.toString(ans));
		
		bf.close();
		bw.flush();
		bw.close();
	}
}

박스배열에서 어쨋든 idx를 사용하면 for문이랑 비슷한 시간이 나올 것 같았는데 아닌가 봅니다..

'코딩테스트' 카테고리의 다른 글

[백준] 5107번 '마니또' - Java  (1) 2023.07.20
[백준] 1043번 '거짓말' - Java  (1) 2023.07.19
[백준] 1068번 '트리' - Java  (1) 2023.07.17
[백준] 1956번 '운동' - Java  (1) 2023.07.16
[백준] 2109번 '순회강연' - Java  (1) 2023.07.14