bong-u/til

백준 - 8979 : 올림픽 (S5)

수정일 : 2024-11-15

 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

해결방법

  • 구조체를 이용하여 국가번호, 금, 은, 동메달 수를 저장한다.
  • cmp함수를 이용하여 정렬한다.
  • 특정 국가번호를 찾아서 등수를 출력한다.
  • 같은 등수를 처리하기 위해 변수 rank를 활용하였다.