문제 링크

요약

  • 쉬운문제

최종

  • 뭐 그냥 문제에서 하라는 대로 하면 된다.
#include <string>
#include <vector>
 
using namespace std;
 
vector<int> solution(vector<int> answers) {
	int student[3] = {0};
	int student_2_map[8] = {2, 1, 2, 3, 2, 4, 2, 5};
	int student_3_map[10] = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
 
	for (int i = 0; i < answers.size(); i++) {
		if (answers[i] == ((i % 5) + 1)) {
			student[0]++;
		}
 
		if (answers[i] == student_2_map[i & 0x7]) {
			student[1]++;
		}
 
		if (answers[i] == student_3_map[i % 10]) {
			student[2]++;
		}
	}
 
	if (student[0] > student[1] && student[0] > student[2]) {
		return {1};
	}
 
	if (student[1] > student[0] && student[1] > student[2]) {
		return {2};
	}
 
	if (student[2] > student[0] && student[2] > student[1]) {
		return {3};
	}
 
	if (student[0] == student[1] && student[1] > student[2]) {
		return {1, 2};
	}
 
	if (student[0] == student[2] && student[2] > student[1]) {
		return {1, 3};
	}
 
	if (student[1] == student[2] && student[2] > student[0]) {
		return {2, 3};
	}
 
	return {1, 2, 3};
}
  • 몇가지만 짚으면:
    • 2번과 3번 학생의 경우에는 귀찮게 규칙찾지 말고 그냥 저렇게 array에 때려넣는게 더 쉽다.
    • 그리고, 동점자 처리의 경우에도 뭐 for 문 돌려서 해결할 수도 있는데 어차피 학생이 3명이니까 그냥 저렇게 무지성 코딩하는 것이 더 구현시간을 줄일 수 있다.