문제링크 : https://www.acmicpc.net/problem/2535
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int MAX = INT_MAX;
int N, n1, n2, n3;
map<int, int>m;
struct info
{
int country;
int student;
int grade;
};
vector<info>v;
bool cmp(info a, info b) //성적 순 정렬
{
return a.grade > b.grade;
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> N;
for(int i=0; i<N; i++)
{
cin >> n1 >> n2 >> n3;
v.push_back({n1, n2, n3});
}
sort(v.begin(), v.end(), cmp);
int cnt = 0;
for(int i=0; i<N; i++)
{
m[v[i].country]++; //나라 갯수 카운팅
if(m[v[i].country] > 2) continue; //메달은 나라별 최대 2개씩
cout << v[i].country << " " <<v[i].student << "\n";
cnt++; //금, 은, 동 3개 출력
if(cnt == 3) break;
}
return 0;
}
다루는 값이 3가지 이므로 구조체에 저장하도록 하였다.
이후 성적 순으로 정렬을 시행해주고, 나라 갯수를 따로 map을 이용하여 카운팅하였다.
현재 성적 순으로 정렬된 상태이기 때문에 금,은,동 순서대로 출력하게 될 것이고, 만약 현재 출력 대상인 나라의 매달 갯수가 2개 이상이라면 스킵하도록 하였다.
금,은,동 이렇게 3가지만 출력해야 하므로 이를 위해 따로 카운팅할 변수를 이용하여 3개 출력후 종료하도록 하였다.
'백준 > 실버' 카테고리의 다른 글
[백준 14729번] 칠무해 (C++) (0) | 2024.05.01 |
---|---|
[백준 5648번] 역원소 정렬 (C++) (0) | 2024.04.30 |
[백준 24417번] 알고리즘 수업 - 피보나치 수 2 (C++) (0) | 2024.04.28 |
[백준 16212번] 정열적인 정렬 (C++) (0) | 2024.04.27 |
[백준 17271번] 리그 오브 레전설 (Small) (C++) (0) | 2024.04.26 |