본문 바로가기

백준 문제 풀이

[백준] 9017번 크로스 컨트리(C++)

728x90

https://www.acmicpc.net/problem/9017

 

처음 봤을 땐 되게 쉬운 문제라고 생각했는데 틀렸습니다가 떠서 질문 게시판을 보니

 

각 팀의 참가 선수가 여섯보다 작으면 그 팀은 점수 계산에서 제외됨을 주의하라. 

 

이것을 대강 넘어가서 그런 것이었다..!! 

 

그리고 점수가 낮을 수록 순위가 높은 것이었다..!!

 

문제를 잘 읽고 분석을 철저히 하자.

 

#include<iostream>
#include<vector>
#include<map>
using namespace std;

int main(){
    int T; cin >> T;

    for(int t = 0; t < T; t++){
        int N; cin >> N;
        
        vector<int> race;

        map<int, int> maps;

        for(int i = 0; i < N; i++){
            int n; cin >> n;
            maps[n]++;
            race.push_back(n);
        }

        vector<int> scores[201];
        int idx = 1;
        for(int i = 0; i < N; i++){
            if(maps[race[i]] == 6) {
                scores[race[i]].push_back(idx);
                idx++;
            }
        }

        int winner = -1;
        int winScore = 1231312;
        int five = -1;

        for(int i = 1; i < 201; i++){
            int tmp = 0;

            if(scores[i].size() == 6){
                for(int j = 0; j < 4; j++) tmp += scores[i][j];

                if(tmp < winScore) {
                    winScore = tmp;
                    winner = i;
                    five = scores[i][4];
                }

                if(tmp == winScore && five > scores[i][4]){
                    winner = i;
                    five = scores[i][4];
                }
            }
        }

        cout << winner << '\n';
    }
}