이번 문제는 수포자가 3명이 있는데 각각 문제를 찍는 방식이 다르다
시험 문제의 답이 입력으로 주어지고 이 수포자 3명이 문제를 찍을 때 가장 문제를 많이 맞힌 사람을 골라야 한다. 물론 여러명일수도 있음. 이때는 오름차순으로 리턴
이번 문제는 아주 쉽게 풀었는데 수포자 3명의 찍는 루틴을 배열로 만든다. 그리고 정답 배열을 돌아가면서 각각 수포자들의 배열들과 비교하는데 이때 인덱스를 조절하기 위해 수포자들의 루틴의 수를 Mod 해줘야 한다
그렇게 수포자 3명의 정답 개수 배열을 채운 뒤 가장 많이 맞힌 사람의 개수를 구하고 그 개수에 해당하는 사람을 리턴 배열에 추가한다
엄청 쉬운 문제라 풀이도 그렇게 길지가 않다
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> answers) {
vector<int> answer;
vector<int> count = {0, 0, 0};
vector<int> one = {1,2,3,4,5};
vector<int> two = {2,1,2,3,2,4,2,5};
vector<int> three = {3,3,1,1,2,2,4,4,5,5};
int len = answers.size();
for(int i = 0; i < len; i++)
{
if(answers[i] == one[i % 5])
{
count[0]++;
}
if(answers[i] == two[i % 8])
{
count[1]++;
}
if(answers[i] == three[i % 10])
{
count[2]++;
}
}
int max = *max_element(count.begin(), count.end());
for(int i = 0; i < count.size(); i++)
{
if(max == count[i])
answer.push_back(i+1);
}
return answer;
}