백준/실버
[백준 2535번] 아시아 정보올림피아드 (C++)
게임개발기원
2024. 4. 29. 16:02
문제링크 : 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개 출력후 종료하도록 하였다.