본문 바로가기

Algorithm/자료구조

(C++) - 백준(BOJ) 5766번 : 할아버지는 유명해!

반응형

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

 

5766번: 할아버지는 유명해!

각 테스트 케이스마다,  당신의 프로그램은 한 행에 2등인 선수(들)의 번호를 출력해야 합니다. 2등인 선수가 두 명 이상인 경우(동점자 발생), 각 선수 번호를 공백으로 구분하여 오름차순으로

www.acmicpc.net

자료구조 (map, vector)를 사용해보는 문제였습니다.

 

📕 풀이방법

📔 입력 및 초기화

n주의 m명의 상위 랭커들을 입력받기위해 n, m을 선언한 뒤 n * m만큼 입력받습니다. 입력하면서 playerScoreMap에 정보를 저장해줍니다. key는 플레이어 번호, value는 점수입니다.

 

📔 풀이과정

 1. 저장된 playerScoreMap을 순회하며 1등의 점수를 first에 저장합니다. 2. first가 아닌 최댓값을 찾는다면 그것이 2등의 점수이므로 second에 저장합니다. 

 

📔 정답출력

다시 순회하며 second와 점수가 같은 value가 있다면 출력해줍니다.


📕 Code

#include <bits/stdc++.h>
#define fastio ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;
int n, m;
int main(){
    fastio;
    while(1){
        cin >> n >> m;
        if(!n && !m) break;
        vector <int> secondRankPlayer, ans;
        map<int, int> playerScoreMap; //선수번호, 점수
        int first = 0, second = 0;
        for(int i = 0, x; i < n * m; i++){
            cin >> x;
            playerScoreMap[x]++;
        }
        for(auto el : playerScoreMap){
            first = max(first, el.second);
        }
        for(auto el : playerScoreMap){
            if(el.second == first) continue;
            second = max(second, el.second);
        }
        for(auto el : playerScoreMap){
            if(el.second == second) cout << el.first << ' ';
        }
        cout << '\n';
    }
}