
1번 수포자는 1, 2, 3, 4, 5 를 번갈아가며 찍고
2번 수포자는 2, 1, 2, 3, 2, 4, 2, 5를 번갈아가며 찍고
3번 수포자는 3, 3, 1, 1, 2, 2, 4, 4, 5, 5를 번갈아가며 찍는다.
정답 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람을 배열에 담아 return
높은 점수를 받는 사람 동률이면 오름차순으로 return

import java.util.*;
class Solution {
public int[] solution(int[] answers) {
ArrayList<Integer> one = new ArrayList<>();
ArrayList<Integer> two = new ArrayList<>();
ArrayList<Integer> three = new ArrayList<>();
int index = 0;
while(index < 200) {
one.add(1);
one.add(2);
one.add(3);
one.add(4);
one.add(5);
index++;
}
List oneSubList = new ArrayList<>(one.subList(0, answers.length));
index = 0;
while(index < 125) {
two.add(2);
two.add(1);
two.add(2);
two.add(3);
two.add(2);
two.add(4);
two.add(2);
two.add(5);
index++;
}
List twoSubList = new ArrayList<>(two.subList(0, answers.length));
index = 0;
while(index < 100) {
three.add(3);
three.add(3);
three.add(1);
three.add(1);
three.add(2);
three.add(2);
three.add(4);
three.add(4);
three.add(5);
three.add(5);
index++;
}
List threeSubList = new ArrayList<>(three.subList(0, answers.length));
int[] result = new int[3];
int cnt = 0;
for (int i = 0; i < answers.length; i++) {
if (answers[i] == (Integer)oneSubList.get(i)) {
cnt++;
}
}
result[0] = cnt;
cnt = 0;
for (int i = 0; i < answers.length; i++) {
if (answers[i] == (Integer)twoSubList.get(i)) {
cnt++;
}
}
result[1] = cnt;
cnt = 0;
for (int i = 0; i < answers.length; i++) {
if (answers[i] == (Integer)threeSubList.get(i)) {
cnt++;
}
}
result[2] = cnt;
int max = result[0];
for (int i = 1; i < 3; i++) {
if (max < result[i]) {
max = result[i];
}
}
ArrayList<Integer> temp = new ArrayList<>();
for (int i = 0; i < 3; i++) {
if (max == result[i]) {
temp.add(i+1);
}
}
int[] returnArr = new int[temp.size()];
for (int i = 0; i < returnArr.length; i++) {
returnArr[i] = temp.get(i);
}
return returnArr;
}
}


⭐ 런타임 에러가 발생할 수 있는 원인 ⭐
1. 배열에 할당된 크기를 넘어서 접근했을 때
2. 전역 배열의 크기가 메모리 제한을 초과할 때
3. 지역 배열의 크기가 스택 크기 제한을 넘어갈 때
3. 0으로 나눌 떄
4. 라이브러리에서 예외를 발생시켰을 때
5. 재귀 호출이 너무 깊어질 때
6. 이미 해제된 메모리를 또 참조할 때
7. 프로그램(main 함수)이 0이 아닌 수를 반환했을 때