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;
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 1105 팔 - 아이디어(Idea) + 수학(Math) + 탐욕법(Greedy) JAVA (0) | 2024.09.18 |
---|---|
[백준] 24481 알고리즘 수업 - 깊이 우선 탐색 3 - DFS(깊이우선탐색) JAVA (0) | 2024.09.18 |
[백준] 14627 파닭파닭 - 파라매트릭서치(Paramatric Search) + 최적화 문제 결정문제로 바꿔풀기 JAVA (0) | 2024.09.16 |
[백준] 14248 점프 점프 - BFS(너비우선탐색) JAVA (0) | 2024.09.16 |
[백준] 12933 오리 - 구현(Implementation) + 스택(Stack) JAVA (0) | 2024.09.16 |