PROGRAMMERS 프로그래머스 : 모의고사
Updated:
시작하면서
이번 문제는 완전 탐색(Brute Force Search) 문제이다.
문제 이해
문제를 읽어보자. 먼저 이 문제에서 나오는 변수는 총 2가지이다.
- vector
answers : 문제의 답 - 수포자들의 문제 찍는 방식
문제 아이디어
이 문제의 핵심은 대기목록의 최대 수포자들의 문제 찍는 방식의 길이가 짧고, 시험의 최대 문제가 10,000개라는 점이다. 충분히 작으므로 완전 탐색을 통해 해결할 수 있다.
- 각 수포자들의 문제 찍는 방식을 vector에 저장한다.
- 첫 문제부터 마지막 문제까지 각 수포자들의 문제 찍는 방식과 비교해가며 점수를 센다.
- 가장 높은 점수를 가진 수포자들을 배열에 넣는다.
해결
#include <string>
#include <vector>
using namespace std;
int GetMathAbandonerScore(const vector<int>& answers, int type)
{
vector<int> number;
int score = 0;
// 각 수포자들의 패턴에 따라 vector를 만든다.
switch (type)
{
case 1:
number = { 1, 2, 3, 4, 5 };
break;
case 2:
number = {2,1,2,3,2,4,2,5};
break;
case 3:
number = { 3, 3, 1, 1, 2, 2, 4, 4, 5, 5 };
break;
default:
break;
}
// 첫 문제부터 마지막 문제까지 문제 찍는 방식을 루프하면서 점수를 센다.
int numberIndex = 0;
for (int i = 0; i < answers.size(); i++, numberIndex++)
{
if (numberIndex >= number.size())
{
numberIndex = 0;
}
if (number[numberIndex] == answers[i])
{
score++;
}
}
return score;
}
vector<int> solution(vector<int> answers)
{
vector<int> answer;
vector<int> score;
int max = 0;
// 1. 각 수포자들의 점수를 구한다.
score.push_back(GetMathAbandonerScore(answers, 1));
score.push_back(GetMathAbandonerScore(answers, 2));
score.push_back(GetMathAbandonerScore(answers, 3));
// 2. 최대 점수를 구한다.
for (int i = 0; i < score.size(); i++)
{
max = (score[i] > max) ? score[i] : max;
}
// 3. 최대 점수를 가진 수포자들을 답에 넣어준다.
for (int i = 0; i < score.size(); i++)
{
if (score[i] == max)
{
answer.push_back(i + 1);
}
}
return answer;
}
Leave a comment