[문제 위치]
https://www.acmicpc.net/problem/15905
[문제 풀이]
이 문제는 정렬과 단순 구현을 통해 해결하는 문제이다.
대회 참가자들의 점수와 제출 시간이 주어진다.
참가자는 (점수 내림차순, 점수 같으면 시간 오름차순)으로 정렬된다.
치킨을 받는 사람은 상위 5명이고, 문제는 5등과 같은 점수를 가진 나머지 참가자 수를 세는 것이다.
즉,
- 모든 참가자를 (점수 내림차순, 시간 오름차순)으로 정렬한다.
- 5등 참가자의 점수를 구한다.
- 6등부터 N등까지 중 점수가 5등과 같은 사람 수를 카운트한다.
아래는 이를 구현한 코드이다.
#include <bits/stdc++.h>
using namespace std;
#define FAST ios::sync_with_stdio(false); cin.tie(0);
struct Player {
int score, time;
};
int main(){
FAST;
int N;
cin >> N;
vector<Player> v(N);
for(int i=0;i<N;i++){
cin >> v[i].score >> v[i].time;
}
sort(v.begin(), v.end(), [](const Player &a, const Player &b){
if(a.score == b.score) return a.time < b.time;
return a.score > b.score;
});
if(N <= 5){
cout << 0 << "\n";
return 0;
}
int fifthScore = v[4].score;
int cnt = 0;
for(int i=5;i<N;i++){
if(v[i].score == fifthScore) cnt++;
else break; // 점수가 내림차순이라 이후는 더 작음
}
cout << cnt << "\n";
}'문제 풀이 > 문제 풀이(BOJ)' 카테고리의 다른 글
| [Silver V] 알파빌과 베타빌 - 29615 (0) | 2025.09.30 |
|---|---|
| [Silver V] 31378 매우 어려운 문제 - 31738 (0) | 2025.09.28 |
| [Silver V] 벚꽃이 정보섬에 피어난 이유 - 17127 (0) | 2025.09.27 |
| [Silver III] 이친수 - 2193 (0) | 2025.09.22 |
| [Silver III] 파도반 수열 - 9461 (0) | 2025.09.22 |