https://www.acmicpc.net/problem/23757
23757번: 아이들과 선물 상자
모든 아이들이 실망하지 않고 각자 원하는 만큼 선물을 가져갈 수 있으면 $1$을, 그렇지 않으면 $0$을 출력한다.
www.acmicpc.net
저는 우선순위 큐를 이용해 문제를 해결하였습니다.
저는 우선순위 큐를 제일 높은 값이 앞으로 오도록 하여 이 값이 현재 들어온 값 즉, 아이들의 원하는 선물의 수보다 큰지 작은지를 비교하였습니다.
작다면 바로 0을 출력하도록 구현하였고, 높다면 우선순위 큐에 꺼내어 아이가 원하는 선물의 수를 빼고 다시 우선선위 큐에 넣어 모든 아이들이 원하는 선물을 가져갈 수 있는지를 확인하였습니다.
package BOJ.greedy;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Collections;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
import java.util.function.Function;
public class BOJ_23757 {
private static final int SUCCESS = 1;
private static final int FAIL = 0;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
Function<String,Integer> stoi = Integer::parseInt;
int n = stoi.apply(st.nextToken());
int m = stoi.apply(st.nextToken());
PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());
st = new StringTokenizer(br.readLine());
for(int i = 0 ; i < n ; i++){
int num = stoi.apply(st.nextToken());
pq.offer(num);
}
st = new StringTokenizer(br.readLine());
int flag = SUCCESS;
for(int i = 0 ; i < m ; i++){
int num = stoi.apply(st.nextToken());
if(pq.peek() >= num){
pq.offer(pq.poll() - num);
}else{
flag = FAIL;
break;
}
}
System.out.println(flag);
}
}
'알고리즘' 카테고리의 다른 글
백준 1459번 걷기 (JAVA) (0) | 2022.08.29 |
---|---|
백준 22116번 창영이와 퇴근 (JAVA) (0) | 2022.08.28 |
백준 4158번 CD (JAVA) (0) | 2022.08.26 |
백준 1833번 고속철도 설계하기 (JAVA) (1) | 2022.08.25 |
백준 16472번 고냥이 (JAVA) (0) | 2022.08.24 |