[C++] 백준 23757번: 아이들과 선물 상자

문제 링크

23757번: 아이들과 선물 상자

문제 요약

N개의 선물상자가 있고, M명의 아이들이 있다. 아이들은 순서대로 선물이 가장 많이 들어있는 상자에서부터 원하는만큼 선물을 가져간다. 만약 상자에 선물이 부족하면 아이들은 실망하게 된다. 아이들이 선물을 가져갈때 실망하는 아이가 있는지 알아내야 한다.

접근 방법

해야할게 너무 자명한 문제였습니다. 상자에 들어있는 선물의 수를 우선순위큐에 넣어줍니다. 그리고 아이들이 원하는 선물의 양만큼 순서대로 우선순위큐의 top에서 뺀 다음에 다시 큐에 넣어줍니다. 만약 top보다 아이들이 원하는 선물이 더 크다면 답은 0이 되고, 한번이라도 그렇게 되지 않는다면 답은 1이 됩니다.

코드

#include <bits/stdc++.h>

using namespace std;

int main(void)
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);

	int n, m;
	cin >> n >> m;

	priority_queue<int> pq;
	for (int i = 0; i < n; i++)
	{
		int c;
		cin >> c;
		pq.push(c);
	}

	bool flag = true;
	for (int i = 0; i < m; i++)
	{
		int w;
		cin >> w;

		if (pq.top() >= w)
		{
			pq.push(pq.top() - w);
			pq.pop();
		}
		else
			flag = false;
	}

	cout << (flag ? 1 : 0);
	return 0;
}

좋은 웹페이지 즐겨찾기