문제 설명
"3명의 수포자가 답을 찍는 순서"와 "모의고사의 답"이 주어진다. 이 수포자들 중, 문제를 가장 많이 맞춘 수포자의 번호를 출력하여라. 단, 동점자가 있을 시 모두 다 출력한다.
입출력 예
더보기
answers가 [1, 2, 3, 4, 5]일 때, return [1]
(1번 수포자가 답을 찍는 순서가 1, 2, 3, 4, 5이다)
풀이
완전탐색 + 구현 형식의 문제이다.
원래는 따로 check를 위한 indexes 배열을 만들려고 했는데, for문 내에서 check[i % check.size()]로 하는 것이 훨씬 간단해 보여서 그렇게 했다.
코드
#include <string>
#include <vector>
using namespace std;
vector<int> solution(vector<int> answers)
{
vector<int> check_1 = { 1, 2, 3, 4, 5 };
vector<int> check_2 = { 2, 1, 2, 3, 2, 4, 2, 5 };
vector<int> check_3 = { 3, 3, 1, 1, 2, 2, 4, 4, 5, 5 };
vector<int> scores = { 0, 0, 0 };
for (int i = 0; i < answers.size(); i++)
{
if (answers[i] == check_1[i % check_1.size()]) scores[0]++;
if (answers[i] == check_2[i % check_2.size()]) scores[1]++;
if (answers[i] == check_3[i % check_3.size()]) scores[2]++;
}
int max_score = 0;
vector<int> result;
for (int i = 0; i < scores.size(); i++)
{
if (max_score < scores[i])
max_score = scores[i];
}
for (int i = 0; i < scores.size(); i++)
{
if (scores[i] == max_score)
result.push_back(i + 1);
}
return result;
}