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;
}