met1, met2, met3에 수포자 3명의 찍기 패턴을 저장해놓는다.
문제에서 시험은 최대 10,000 문제로 구성되어있다고 하므로 answers의 길이는 최대 10,000이다.
따라서 answers와 수포자들의 답을 비교할 때 % 연산자를 사용해야 한다.
각 점수가 어떤 수포자의 점수인지 식별할 수 있게 scores에 pair로 저장하고 점수를 기준으로 내림차순 정렬한다.
그 후 scores 중 가장 높은 점수를 받은 사람을 모두 answers 배열에 추가 후, 오름차순으로 정렬하면 된다.
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> answers) {
vector<int> answer;
int num1 = 0, num2 = 0, num3 = 0;
vector<int> met1 = {1, 2, 3, 4, 5};
vector<int> met2 = {2, 1, 2, 3, 2, 4, 2, 5};
vector<int> met3 = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
for(int i = 0; i < answers.size(); i++) {
if (answers[i] == met1[i % met1.size()]) num1++;
if (answers[i] == met2[i % met2.size()]) num2++;
if (answers[i] == met3[i % met3.size()]) num3++;
}
vector<pair<int, int>> scores = {
{num1, 1},
{num2, 2},
{num3, 3}
};
// 점수 기준 내림차순 정렬
sort(scores.rbegin(), scores.rend());
int max_score = scores[0].first;
// 가장 높은 점수를 받은 사람 모두 answer에 추가
for (auto& p : scores) {
if (p.first == max_score) {
answer.push_back(p.second);
}
}
sort(answer.begin(), answer.end());
return answer;
}