알고리즘

백준 23757번 아이들과 선물 상자 (JAVA)

박카스마시며코딩 2022. 8. 27. 18:03

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