문제
접근
1,2,3번 수포자의 반복되는 패턴을 미리 저장해둔다.
1번 = {1,2,3,4,5}
2번 = {2,1,2,3,2,4,2,5}
3번 = {3,3,1,1,2,2,4,4,5,5}
그 후 answers의 원소들과 각 수포자의 답과 비교하여 맞은 개수를 카운팅해주면 된다.
코드
- C++ 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <vector>
using namespace std;
vector<int> solution(vector<int> answers) {
vector<int> answer;
vector<vector<int>> sol ={ {1,2,3,4,5},
{2,1,2,3,2,4,2,5},
{3,3,1,1,2,2,4,4,5,5} };
int score[3] = {0,0,0};
for(int i = 0; i< answers.size(); i++){
for(int j = 0; j<3; j++){
if(sol[j][i%sol[j].size()] == answers[i])
score[j]++;
}
}
int max = -1;
for(int i = 0; i<3;i++){
if(score[i] > max){
answer.clear();
answer.push_back(i+1);
max = score[i];
}
else if(score[i] == max){
answer.push_back(i+1);
}
}
return answer;
}
- 파이썬 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def solution(answers):
sol = [[1,2,3,4,5],
[2,1,2,3,2,4,2,5],
[3,3,1,1,2,2,4,4,5,5]]
score = [0,0,0]
for i, answer in enumerate(answers):
for j in range(3):
if sol[j][i%len(sol[j])] == answer:
score[j] += 1
answer = []
maxValue = max(score)
for j in range(3):
if score[j] == maxValue:
answer.append(j+1)
return answer