문제
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다.
1번 수포자가 찍는 방식 : 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ...
2번 수포자가 찍는 방식 : 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ...
3번 수포자가 찍는 방식 : 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ...
1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성해주세요.
제한 조건
- 시험은 최대 10, 000 문제로 구성되어있습니다.
- 문제의 정답은 1, 2, 3, 4, 5 중 하나입니다.
- 가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬해주세요.
코드
더보기
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> answers) {
vector<int> answer;
vector<int> student1 = { 1, 2, 3, 4, 5 };
vector<int> student2 = { 2, 1, 2, 3, 2, 4, 2, 5 };
vector<int> student3 = { 3, 3, 1, 1, 2, 2, 4, 4, 5, 5 };
vector<int> temp(3);
for (int i = 0; i < answers.size(); i++)
{
if (student1[i%student1.size()] == answers[i]) temp[0]++;
if (student2[i%student2.size()] == answers[i]) temp[1]++;
if (student3[i%student3.size()] == answers[i]) temp[2]++;
}
int maxnum = *max_element(temp.begin(), temp.end());
if (maxnum == temp[0])
{
answer.push_back(1);
}
if (maxnum == temp[1])
{
answer.push_back(2);
}
if (maxnum == temp[2])
{
answer.push_back(3);
}
return answer;
}
코드해설
수포자 3명의 답을 저장한 3개의 벡터를 만들어준다. 그리고 점수를 저장할 벡터 temp를 하나 만들어 준다.
for문으로 정답이 들어있는 answers의 벡터의 크기 만큼 돌면서, if문으로 각 수포자의 정답과 answers의 정답이 맞다면 정답의 갯수를 늘려준다.
if문의 조건문은 각 벡터마다 사이즈가 다르니 i의 값에서 각 수포자들의 답변의 크기 만큼 나눈것의 나머지 값을 출력하게 한다. 벡터의 첫 시작값이 0이라는 것을 고려해야된다.
그리고 max_element로 각 수포자들이 정답을 맞춘 횟수가 저장된 벡터에서 제일 큰 값을 저장한다.
if 문으로 가장 큰 값이 저장된 값과 각 수포자들의 정답 횟수를 비교해서 동일하면 answer에 값을 넣어주면 된다.
'코딩 > 코드 문제 묶음' 카테고리의 다른 글
| [프로그래머스] 덧칠하기 (0) | 2025.02.10 |
|---|---|
| [프로그래머스] 소수 만들기 (0) | 2025.02.10 |
| [프로그래머스] 과일 장수 (0) | 2025.02.05 |
| [프로그래머스] 카드 뭉치 (3) | 2025.02.04 |
| [프로그래머스] 명예의 전당(1) (0) | 2025.01.31 |