반응형
코딩테스트 연습 - 모의고사
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는
programmers.co.kr
풀이1 )
세 명의 규칙을 찾아서 1번부터 answers.size()까지 각 세명의 답(vc[][])을 채워넣는 배열을 만들고 이후 채점을 한다.
세 명의 규칙은 다음과 같다.
- 1 2 3 4 5 반복
- 홀수번째는 2, 짝수번째는 1 3 4 5 반복
- 3 1 2 4 5가 각각 2번씩 반복
세 명의 점수(col) 중 가장 큰 점수(*max_element())를 찾고 가장 큰 점수와 비교하여 같으면 정답 배열에 집어넣는다.
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> answers) {
vector<int> answer;
vector<int> vc[3];
vector<int> input(3);
vector<int> col(3);
int len = answers.size();
for(int i = 0; i < len; ++i){
input[0] = i%5+1;
if(i%2)
input[1] = i/2%4 + (i/2%4 ? 2 : 1);
else
input[1] = 2;
switch(i/2%5){
case 0:
input[2] = 3;
break;
case 1:
input[2] = 1;
break;
case 2:
input[2] = 2;
break;
case 3:
input[2] = 4;
break;
case 4:
input[2] = 5;
break;
}
for(int j = 0; j < 3; ++j)
vc[j].push_back(input[j]);
}
for(int i = 0; i < len; ++i){
for(int j = 0; j < 3; ++j){
if(vc[j][i] == answers[i])
col[j]++;
}
}
int top = *max_element(col.begin(), col.end());
for(int i = 0; i < 3; ++i)
if(col[i] == top)
answer.push_back(i+1);
return answer;
}
풀이2)
정답코드에서 더 구현에 쉬운 방법을 보고 다시 구현해봤다.
세 명의 정답을 보면 특정 주기로 답이 반복되므로 반복되는 부분을 배열로 저장한 후 %연산자를 활용한다.
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> answers) {
vector<int> answer;
vector<int> one = {1, 2, 3, 4, 5};
vector<int> two = {2, 1, 2, 3, 2, 4, 2, 5};
vector<int> thr = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
vector<int> col(3);
int len = answers.size();
for(int i = 0; i < len; ++i) {
if(answers[i] == one[i%one.size()])
col[0]++;
if(answers[i] == two[i%two.size()])
col[1]++;
if(answers[i] == thr[i%thr.size()])
col[2]++;
}
int top = *max_element(col.begin(), col.end());
for(int i = 0; i < 3; ++i)
if(col[i] == top)
answer.push_back(i+1);
return answer;
}
반응형
'문제풀이 > 프로그래머스' 카테고리의 다른 글
[C++] 프로그래머스(Level 1) - 키패드 누르기 (0) | 2020.12.09 |
---|---|
[C++] 프로그래머스(Level 1) - [1차] 비밀지도 (0) | 2020.12.09 |
[C++] 프로그래머스(Level 1) - [1차] 다트 게임 (0) | 2020.10.31 |
[C++] 프로그래머스(Level 1) - 실패율 (0) | 2020.10.29 |
[C++] 프로그래머스(Level 1) - 크레인 인형뽑기 게임 (0) | 2020.10.29 |