시간 복잡도
- N이 최대 10,000 이므로 시간은 충분합니다.
문제 접근법
- 각 수포자가 문제를 찍는 1 사이클을 배열로 가지고 있습니다.
- 문제의 정답을 순회하며 각 수포자가 찍은 정답과 비교하여 정답 횟수를 배열에 업데이트 합니다.
- 정답의 최댓값을 구한 후 같은 정답을 가지고 있는 수포자를 정답 배열에 추가합니다.
코드
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
static int p1[] = {1,2,3,4,5};
static int p2[] = {2,1,2,3,2,4,2,5};
static int p3[] = {3,3,1,1,2,2,4,4,5,5};
static int result[] = {0,0,0};
vector<int> solution(vector<int> answers) {
vector<int> answer;
for(int i=0; i<answers.size(); i++)
{
int idx1 = i%5;
int idx2 = i%8;
int idx3 = i%10;
if(answers[i]==p1[idx1])
result[0]++;
if(answers[i]==p2[idx2])
result[1]++;
if(answers[i]==p3[idx3])
result[2]++;
}
int max=0;
for(int i=0; i<3; i++)
{
if(result[i]>max)
max=result[i];
}
for(int i=0; i<3; i++)
{
if(result[i]==max)
answer.push_back(i+1);
}
return answer;
}