https://www.acmicpc.net/problem/23757

코드설명

우선순위큐(PriorityQueue) 를 활용합니다.

 

문제에서 유의할 부분은, 만약 하나의 상자를 확인했는데 해당 상자에 자신이 원하는 것보다 작은 선물의 개수가 들어있는 상자였다면 바로 실망하는 것으로 합니다.

그러므로 그 상황에서 바로 "0"을 출력하고 종료하면 됩니다.

코드

package Main;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Collections;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
 
public class Main {
	static int N, M, P, K, A, B, X, R, T, S, C;
	static long answer = 0;
	static int[] c = new int[100001];
	static int[] w = new int[100001];
	static PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		N = Integer.parseInt(st.nextToken());
		M = Integer.parseInt(st.nextToken());
		
		st = new StringTokenizer(br.readLine());
		for(int i=0;i<N; i++) {
			c[i] = Integer.parseInt(st.nextToken());
			pq.offer(c[i]);
		}
		st = new StringTokenizer(br.readLine());
		for(int i=0;i<M; i++) {
			w[i] = Integer.parseInt(st.nextToken());
		}
		
		answer = solve();
		System.out.println(answer);
	}
	
	static int solve() {
		int idx = 0;
		while(!pq.isEmpty() && idx < M) {
			int temp = pq.poll();
			int want = w[idx];
			if(temp >= want) {
				temp -= want;
				idx+=1;
				if(temp != 0) pq.add(temp);
			} else if(temp < want) {
				return 0;
			}
		}
		
		if(idx == M) return 1;
		return 0;
	}
}

+ Recent posts