#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> answers)
{
// 1. 각 사람마다 몇 문제씩 맞췄는지 확인한다.
// 모든 문제의 답을 순회하면서 각 사람마다 횟수를 센다.
int counts[3] = { 0 };
// 룩업테이블
static const int solutions[3][10] = {
{ 1, 2, 3, 4 ,5 },
{ 2, 1, 2, 3, 2, 4, 2, 5 },
{ 3, 3, 1, 1, 2, 2, 4, 4, 5, 5 }
};
static const int patternSize[3] = { 5, 8, 10 };
size_t size = answers.size();
for (int i = 0; i < size; ++i)
{
int currentAnswer = answers[i];
if (currentAnswer == solutions[0][i % patternSize[0]])
{
++counts[0];
}
if (currentAnswer == solutions[1][i % patternSize[1]])
{
++counts[1];
}
if (currentAnswer == solutions[2][i % patternSize[2]])
{
++counts[2];
}
}
// 2. 가장 많이 맞춘 사람을 확인한다.
// 2-1. 최대값을 저장한다.
int maxCount = 0;
for (int i = 0; i < 3; ++i)
{
if (maxCount < counts[i])
{
maxCount = counts[i];
}
}
// 2-2. 최댓값과 같은지 비교한다.
vector<int> answer;
for (int i = 0; i < 3; ++i)
{
if (maxCount == counts[i])
{
answer.push_back(i + 1);
}
}
// 2-3. 같다면 ? answer에 삽입한다.
// 3. 여러 명이라면 오름차순으로 정렬한다.
sort(answer.begin(), answer.end());
return answer;
}