Skip to content

Commit 51b0ac0

Browse files
authored
[BOJ] 17503 맥주 축제 (S1)
1 parent cc1d9b5 commit 51b0ac0

1 file changed

Lines changed: 60 additions & 0 deletions

File tree

박예진/8주차/260219.cpp

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
#include <iostream>
2+
#include <vector>
3+
#include <algorithm>
4+
#include <queue>
5+
using namespace std;
6+
7+
/*
8+
K 종류 (맥주 선호도, 도수 레벨)
9+
도수 레벨 <= 간 레벨
10+
마시는 맥주 N개 선호도 합 >= M
11+
선호도 합 M을 채우면서 N개의 맥주를 모두 마실 수 있는 레벨 최솟값
12+
*/
13+
14+
struct Beer{
15+
int like, level;
16+
};
17+
18+
struct cmp {
19+
bool operator()(const Beer &b1, const Beer &b2){
20+
return b1.level < b2.level; // 레벨 오름차순
21+
}
22+
};
23+
24+
int N, M, K; // 열리는 기간, 채워야하는 선호도 합, 종류수
25+
vector<Beer> beers;
26+
priority_queue<int, vector<int>, greater<int>> pq;
27+
28+
int main(){
29+
ios_base::sync_with_stdio(false);
30+
cin.tie(NULL); cout.tie(NULL);
31+
32+
cin >> N >> M >> K;
33+
for(int i = 0; i < K; i++){
34+
int like, level;
35+
cin >> like >> level;
36+
beers.push_back({like, level});
37+
}
38+
// 레벨 최솟값
39+
sort(beers.begin(), beers.end(), cmp());
40+
41+
long long likeSum = 0;
42+
for(int i = 0; i < K; i++){
43+
pq.push(beers[i].like);
44+
likeSum += beers[i].like;
45+
46+
// N개 초과, 가장 작은 선호도 제거
47+
if (pq.size() > N) {
48+
likeSum -= pq.top();
49+
pq.pop();
50+
}
51+
// N개일 때, 합이 M 이상
52+
if (pq.size() == N && likeSum >= M) {
53+
cout << beers[i].level;
54+
return 0;
55+
}
56+
}
57+
cout << -1;
58+
59+
return 0;
60+
}

0 commit comments

Comments
 (0)