안녕하세요. 오늘은 최후의 승자를 구할 거예요.

문제

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

아이디어

일단 입력을 받습니다.
그리고 역순으로 정렬을 합니다.
M번 반복을 합니다.
각각의 차례에서 각 사람의 수를 보고 최댓값을 구한뒤 그 최댓값을 가진 사람에게 cnt++해줍니다.
cnt의 최댓값이 있는 사람을 출력해줍니다.

소스코드

#include <iostream>
#include <algorithm>
#include <vector>
#define ll long long
using namespace std;

int main(void)
{
    ios_base::sync_with_stdio(false); cin.tie(NULL);
    ll N, M, i, j, cnt[111] = { 0 };
    vector <ll> v[111];

    cin >> N >> M;
    for (i = 1; i <= N; i++)
    {
        ll x;
        for (j = 1; j <= M; j++)
        {
            cin >> x;
            v[i].push_back(x);
        }
        sort(v[i].begin(), v[i].end(), greater<>());
    }

    for (i = 0; i < M; i++)
    {
        ll mx = 0;
        for (j = 1; j <= N; j++) mx = max(mx, v[j][i]);

        for (j = 1; j <= N; j++)
            if (v[j][i] == mx)
                cnt[j]++;
    }

    ll ans = 0;
    for (i = 1; i <= N; i++)
        ans = max(ans, cnt[i]);
    for (i = 1; i <= N; i++)
        if (ans == cnt[i])
            cout << i << ' ';
}


감사합니다.

0개의 댓글