[문제 위치]
https://www.acmicpc.net/problem/8979
[문제 풀이]
순위를 매기는 문제이다.
기본적 로직은 금매달이 은메달보다 은메달이 동메달보다 우위이며 순위는 자신보다 높은 사람+1 만큼만 고려하기 때문에 간단히 구현할 수 있다.
방법은 알고 싶은 국가의 메달 갯수를 스탠다드로 정한 다음 나라들의 매달 갯수를 순회하며 더 높은 순위인지 아닌지만 판단하여 그렇다면 rank를 낮추는 식으로 구현하면 된다.
문제 조건에는 정렬을 이용하도록 하였지만 최선의 선택을 하는 그리디 방식으로도 가능하다.
#include <iostream>
#include <vector>
using namespace std;
#define fastio ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)
int main() {
fastio; // 빠른 입출력 설정
int medal[1000][4];
int N, K;
cin >> N >> K;
int std_G, std_S, std_B;
for (int i = 0; i < N; i++) {
int nation, gold, silver, bronze;
cin >> nation >> gold >> silver >> bronze;
if (nation == K) {
std_G = gold;
std_S = silver;
std_B = bronze;
}
medal[i][0] = nation;
medal[i][1] = gold;
medal[i][2] = silver;
medal[i][3] = bronze;
}
int rank = 1; // 순위는 1부터 시작
for (int i = 0; i < N; i++) {
if (medal[i][1] > std_G ||
(medal[i][1] == std_G && medal[i][2] > std_S) ||
(medal[i][1] == std_G && medal[i][2] == std_S && medal[i][3] > std_B)) {
rank++;
}
}
cout << rank << '\n';
return 0;
}
'문제 풀이 > 문제 풀이(BOJ)' 카테고리의 다른 글
[Silver V] 피자 - 14606 (1) | 2024.08.27 |
---|---|
[Silver V] 암호해독기 - 17176 (0) | 2024.08.27 |
[Bronze II] 트럭주차 - 2979 (0) | 2024.08.25 |
[Silver V] 최후의 승자 - 12760 (0) | 2024.08.25 |
[Silver V] 행렬 곱셈 - 2740 (0) | 2024.08.23 |