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