1#include <bits/stdc++.h>
2using namespace std;
3
4struct medal {
5 int number;
6 int gold;
7 int silver;
8 int bronze;
9};
10bool cmp(medal a, medal b) {
11 if (a.gold != b.gold) return a.gold > b.gold;
12 if (a.silver != b.silver) return a.silver > b.silver;
13 return a.bronze > b.bronze;
14
15}
16int main() {
17 cin.tie(0)->sync_with_stdio(false);
18 int n = 0, target = 0, rank = 0;
19 cin >> n;
20 cin >> target;
21
22 medal* arr = new medal[n];
23
24 for (int i = 0; i < n; i++) {
25 cin >> arr[i].number >> arr[i].gold >> arr[i].silver >> arr[i].bronze;
26 }
27 sort(arr, arr + n, cmp);
28
29 for (int i = 0; i < n; i++) {
30 if (i == 0 || (arr[i].gold != arr[i - 1].gold || arr[i].silver != arr[i - 1].silver || arr[i].bronze || arr[i - 1].bronze)) {
31 rank = i + 1;
32 }
33
34 if (arr[i].number == target) {
35 cout << rank << "\n";
36 break;
37 }
38 }
39
40 delete[] arr;
41 return 0;
42}
문제
1번째 줄에 국가개수, 특정 국가번호가 주어진다.
2번째 줄에 국가번호, 금메달 수, 은메달 수, 동메달 수가 주어진다.
특정 국가번호가 몇등인지 출력해야한다.
금, 은, 동메달 수가 모두 같다면 같은 등수로 처리한다.
만약 공동 2등인 나라가 2개 나오는 경우, 3등은 없다
TC
- input
4 3
1 1 2 0
2 0 1 0
3 0 1 0
4 0 0 1 - ouput
2
- input
해결방법
- 구조체를 이용하여 국가번호, 금, 은, 동메달 수를 저장한다.
- cmp함수를 이용하여 정렬한다.
- 특정 국가번호를 찾아서 등수를 출력한다.
- 같은 등수를 처리하기 위해 변수 rank를 활용하였다.