본문 바로가기

문제 풀이/문제 풀이(BOJ)

[Silver V] 스텔라가 치킨을 선물했어요 - 15905

[문제 위치]
https://www.acmicpc.net/problem/15905

[문제 풀이]

이 문제는 정렬과 단순 구현을 통해 해결하는 문제이다.
대회 참가자들의 점수와 제출 시간이 주어진다.
참가자는 (점수 내림차순, 점수 같으면 시간 오름차순)으로 정렬된다.
치킨을 받는 사람은 상위 5명이고, 문제는 5등과 같은 점수를 가진 나머지 참가자 수를 세는 것이다.

즉,

  1. 모든 참가자를 (점수 내림차순, 시간 오름차순)으로 정렬한다.
  2. 5등 참가자의 점수를 구한다.
  3. 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";
}