코딩테스트/프로그래머스

[프로그래머스] 모의고사 (C++)

QuickClid 2025. 3. 24. 19:04

문제 설명

"3명의 수포자가 답을 찍는 순서"와 "모의고사의 답"이 주어진다. 이 수포자들 중, 문제를 가장 많이 맞춘 수포자의 번호를 출력하여라. 단, 동점자가 있을 시 모두 다 출력한다.

 

입출력 예

더보기

answers가 [1, 2, 3, 4, 5]일 때, return [1]

(1번 수포자가 답을 찍는 순서가 1, 2, 3, 4, 5이다)

 

풀이

완전탐색 + 구현 형식의 문제이다. 

 

원래는 따로 check를 위한 indexes 배열을 만들려고 했는데, for문 내에서 check[i % check.size()]로 하는 것이 훨씬 간단해 보여서 그렇게 했다. 

 

코드

#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> answers)
{
	vector<int> check_1 = { 1, 2, 3, 4, 5 };
	vector<int> check_2 = { 2, 1, 2, 3, 2, 4, 2, 5 };
	vector<int> check_3 = { 3, 3, 1, 1, 2, 2, 4, 4, 5, 5 };

	vector<int> scores = { 0, 0, 0 };
	for (int i = 0; i < answers.size(); i++)
	{
		if (answers[i] == check_1[i % check_1.size()]) scores[0]++;
		if (answers[i] == check_2[i % check_2.size()]) scores[1]++;
		if (answers[i] == check_3[i % check_3.size()]) scores[2]++;
	}

	int max_score = 0;
	vector<int> result;
	for (int i = 0; i < scores.size(); i++)
	{
		if (max_score < scores[i])
			max_score = scores[i];
	}
	for (int i = 0; i < scores.size(); i++)
	{
		if (scores[i] == max_score)
			result.push_back(i + 1);
	}
	return result;
}