import java.util.*;
class Solution {
public int[] solution(int[] answers) {
//수포자 패턴
int[] pattern1 = {1, 2, 3, 4, 5};
int[] pattern2 = {2, 1, 2, 3, 2, 4, 2, 5};
int[] pattern3 = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
int[] count = new int[3];
//정답 계산
for (int i = 0; i < answers.length; i++) {
if (answers[i] == pattern1[i % pattern1.length]) count[0]++;
if (answers[i] == pattern2[i % pattern2.length]) count[1]++;
if (answers[i] == pattern3[i % pattern3.length]) count[2]++;
}
//가장 많은 문제 (문제 중 최대값)
int max = Math.max(count[0], Math.max(count[1], count[2]));
//맞춘 사람 세팅
List<Integer> result = new ArrayList<>();
if (count[0] == max) {
result.add(1);
}
if (count[1] == max) {
result.add(2);
}
if (count[2] == max) {
result.add(3);
}
//배열로 변환
int[] resultArray = new int[result.size()];
for (int i = 0; i < result.size(); i++) {
resultArray[i] = result.get(i);
}
return resultArray;
}
}
문제의 포인트는 수포자들의 패턴을 파악하고 해당 패턴으로 문제와 비교하는 것이라 생각했다. 그래서 먼저 각자 패턴과 사이즈를 구하고 해당 사이즈를 기준으로 for문에 적용시켰다. 이후 가장 많은 문제를 맞춘 문제를 찾고 해당 사람을 찾아 ++ 시켰다.
문제는 쉽지만 완전탐색이라 노가다가 좀 필요한 문제였다. 쓰면서도 어떻게 하면 직관적으로 이해되게 풀 수 있을까? 고찰하면서 쓴 답안...