자기개발/코딩테스트

C++ (코딩테스트) - Yonsei TOTO(백준) 우선순위 큐 사용

pi92 2023. 11. 28. 09:40

문제 

https://www.acmicpc.net/problem/12018

 

12018번: Yonsei TOTO

연세대학교 수강신청이 얼마 전부터 바뀌어, 마일리지 제도로 바뀌었다. 이 제도는 각각의 학생들에게 마일리지를 주어 듣고 싶은 과목에 마일리지를 과목당 1~36을 분배한다. 그리고 모두 분배

www.acmicpc.net

 

내가 푼 코드

#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;

int main() {
	int N, M, cnt = 0;
	priority_queue<int, vector<int>, greater<int>> que;
	cin >> N >> M;
    
	for (int i = 0; i < N; i++) {
		int p, l, min;
		priority_queue<int, vector<int>, less<int>> temp;
		cin >> p >> l;
		for (int i = 0; i < p; i++)
		{
			int list;
			cin >> list;
			temp.emplace(list);
		}
        
		int size = temp.size();
		if (size < l) 
		{
			min = 1;
		}
		else
		{
			for (int i = 0; i < l - 1; i++)
			{
				temp.pop();
			}
			min = temp.top();
		}
		que.emplace(min);
	}

	for (int i = 0; i < N; i++)
	{
		int top = que.top();
		if (M < top)
		{
			break;
		}
		M -= top;
		que.pop();
		cnt++;
	}
	cout << cnt << endl;
    
	return 0;
}