Doby's Lab

백준 12760번: 최후의 승자는 누구? (C++) 본문

PS/BOJ

백준 12760번: 최후의 승자는 누구? (C++)

도비(Doby) 2022. 9. 17. 23:21

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

 

12760번: 최후의 승자는 누구?

수많은 토너먼트를 거쳐 최종 플레이어 \(N\)명이 남아있다. 각 플레이어는 \(M\)장씩의 숫자가 적힌 카드를 가지고 있으며, 이들은 매 턴 자신이 가진 카드 중 가장 큰 카드를 두고 비교를 하는데,

www.acmicpc.net


Solved By: Sort

 

매 판마다 플레이어들은 제일 큰 카드를 내기 때문에 각 플레이어 column마다 정렬을 해준다.

그리고 column마다 제일 최댓값을 가지는 index의 점수를 +1 하고, 마지막에 어떤 index의 점수가 가장 높은지 오름차순으로 출력한다.

#include <iostream>
#include <vector>
#include <algorithm>
#include <stack>
#define MAX 101
using namespace std;

int n, m;

bool cmp(int a, int b){
    return a > b;
}

int main(){
    ios_base::sync_with_stdio(false);
    
    cin >> n >> m;
    vector<vector<int>> score(n + 1, vector<int>(m + 1, 0));
    
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= m; j++){
            cin >> score[i][j];
        }
    }
    
    for(int i = 1; i <= n; i++){
        sort(score[i].begin() + 1, score[i].end(), cmp);
    }
    
    vector<int> player(n + 1, 0);
    
    for(int i = 1; i <= m; i++){
        int maxScore = 0;
        stack<int> s;
        for(int j = 1; j <= n; j++){
            if(score[j][i] > maxScore){
                maxScore = score[j][i];
                while(!s.empty()) s.pop();
                s.push(j);
            }
            else if(score[j][i] == maxScore){
                s.push(j);
            }
        }
        
        while(!s.empty()){
            player[s.top()]++;
            s.pop();
        }
    }
    int maxValue = 0;
    
    for(int i = 1; i < player.size(); i++){
        maxValue = max(maxValue, player[i]);
    }
    
    for(int i = 1; i < player.size(); i++){
        if(maxValue == player[i]) cout << i << ' ';
    }
    
    return 0;
}

 

728x90

'PS > BOJ' 카테고리의 다른 글

백준 1351번: 무한 수열 (C++)  (0) 2022.10.30
백준 14221번: 편의점 (C++)  (0) 2022.10.19
백준 1854번: K번째 최단경로 찾기 (C++)  (1) 2022.08.24
백준 13306번: 트리 (C++)  (0) 2022.08.13
백준 1305번: 광고 (C++)  (0) 2022.08.10