문제
풀이
정답이 일치하는 개수는 다음과 같이 3개의 배열을 미리 만든후 나머지를 이용해서 쉽게 구할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int n1[5] = {1,2,3,4,5};
int n2[8] = {2,1,2,3,2,4,2,5};
int n3[10] = {3,3,1,1,2,2,4,4,5,5};
int cnt1=0,cnt2=0,cnt3=0;
for(int i=0;i<answers.size();i++){
int cur = answers[i];
if(n1[i%5]==cur){
cnt1++;
}
if(n2[i%8]==cur){
cnt2++;
}
if(n3[i%10]==cur){
cnt3++;
}
}
이제 cnt1,2,3 중에 최대값을 구해야 한다.
처음에는 일일이 경우를 나눠서 구해줬는데, 더 효율적인 방법이 있었다.
바로 algorithm 헤더의 max_element 함수를 사용하는 것이다.
max_element는 주소 값을 반환하므로 *을 사용하여 값에 접근하는 것을 잊지말자.
1
int max_score = *max_element(v.begin(),v.end());
소스 코드
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
30
31
32
33
34
35
36
37
38
39
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> answers) {
vector<int> answer;
int n1[5] = {1,2,3,4,5};
int n2[8] = {2,1,2,3,2,4,2,5};
int n3[10] = {3,3,1,1,2,2,4,4,5,5};
int cnt1=0,cnt2=0,cnt3=0;
for(int i=0;i<answers.size();i++){
int cur = answers[i];
if(n1[i%5]==cur){
cnt1++;
}
if(n2[i%8]==cur){
cnt2++;
}
if(n3[i%10]==cur){
cnt3++;
}
}
vector<int> v(3);
v.assign({cnt1,cnt2,cnt3});
int max_score = *max_element(v.begin(),v.end());
for(int i=0;i<3;i++){
if(max_score==v[i]){
answer.push_back(i+1);
}
}
return answer;
}