https://school.programmers.co.kr/learn/courses/30/lessons/42840
이 문제는 완전 탐색을 통해 정답을 가장 많이 맞춘 학생을 찾는 문제이다.
문제 수는 최대 10000개 이기 때문에 단순 반복문으로 문제를 해결할 수 있다.
또한 3명의 학생이 찍는 형식은 정해져있다.
학생 1은 5개의 경우가 반복된다. 또한 학생 2는 8개, 학생 3은 10개의 경우가 반복된다.
따라서 i%M의 연산을 통해 현제 번호에 찍은 형식을 알 수 있다.
처음 문제를 해결할 때 가장 정답을 많이 맞춘 학생을 찾을 때 if문을 중첩하여 해결하였다.
#include <string>
#include <vector>
using namespace std;
int op1[] = {1, 2, 3, 4, 5};
int op2[] = {2, 1, 2, 3, 2, 4, 2, 5};
int op3[] = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
int N;
int st1, st2, st3;
vector<int> solution(vector<int> answers) {
vector<int> answer;
N = answers.size();
for(int i = 0;i<N;i++){
int num = answers[i];
if(op1[i%5] == num)
st1 += 1;
if(op2[i%8] == num)
st2 += 1;
if(op3[i%10] == num)
st3 += 1;
}
if(st1 == st2){
if(st1 == st3){
answer.push_back(1);
answer.push_back(2);
answer.push_back(3);
}
else if(st1 < st3){
answer.push_back(3);
}
else{
answer.push_back(1);
answer.push_back(2);
}
}
else if(st1 > st2){
if(st3 > st1)
answer.push_back(3);
else if(st1 > st3)
answer.push_back(1);
else{
answer.push_back(1);
answer.push_back(3);
}
}
else{
if(st2 > st3){
answer.push_back(2);
}
else if(st3 > st2){
answer.push_back(3);
}
else{
answer.push_back(2);
answer.push_back(3);
}
}
return answer;
}
하지만 위 방식은 N명의 학생이 생길 경우 복잡하게 된다.
따라서 아래 방식과 같이 현재 정답중 가장 큰 수를 찾고, 그 값에 해당하는 학생을 정답 배열에 삽입하여 코드를 고쳤다.
#include <string>
#include <vector>
using namespace std;
int op1[] = {1, 2, 3, 4, 5};
int op2[] = {2, 1, 2, 3, 2, 4, 2, 5};
int op3[] = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
int N;
int st[3];
vector<int> solution(vector<int> answers) {
vector<int> answer;
N = answers.size();
for(int i = 0;i<N;i++){
int num = answers[i];
if(op1[i%5] == num)
st[0] += 1;
if(op2[i%8] == num)
st[1] += 1;
if(op3[i%10] == num)
st[2] += 1;
}
int maxNum = max(max(st[0], st[1]), st[2]);
for(int i = 0;i<3;i++){
if(maxNum == st[i])
answer.push_back(i+1);
}
return answer;
}
'Programmers Review' 카테고리의 다른 글
[Lv 1] 체육복 (0) | 2024.06.01 |
---|---|
[Lv 1] 완주하기 못한 선수 (0) | 2024.06.01 |
[Lv 1] K번째수 (1) | 2024.05.30 |
[Lv 1] 크레인 인형뽑기 (0) | 2024.05.30 |
[Lv 1] 키패드 누르기 (0) | 2024.05.30 |