수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 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 함수를 작성해주세요.
answers | return |
---|---|
[1,2,3,4,5] | [1] |
[1,3,2,4,2] | [1,2,3] |
입출력 예 #1
따라서 가장 문제를 많이 맞힌 사람은 수포자 1입니다.
입출력 예 #2
class Solution {
public int[] solution(int[] answers) {
int score1=0, score2=0, score3=0; //1,2,3번의 점수
Integer[] pattern1arr = {1, 2, 3, 4, 5}; //패턴
Integer[] pattern2arr = {2, 1, 2, 3, 2, 4, 2, 5};
Integer[] pattern3arr = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
ArrayList<Integer> pattern1 = new ArrayList<>(Arrays.asList(pattern1arr)); //반복자 사용을 위해 패턴 배열을 배열 리스트로 변환
ArrayList<Integer> pattern2 = new ArrayList<>(Arrays.asList(pattern2arr));
ArrayList<Integer> pattern3 = new ArrayList<>(Arrays.asList(pattern3arr));
Iterator itr1 = pattern1.iterator(); //반복자 선언
Iterator itr2 = pattern2.iterator();
Iterator itr3 = pattern3.iterator();
for(int i=0; i<answers.length; i++) { //문제 정답 배열 탐색
int answer = answers[i]; //거듭 배열 참조하는 것을 막기 위해 현재 정답 변수 할당
if (!itr1.hasNext()) { //패턴이 반복하도록, 패턴 끝이 오면 다시 초기화하여 처음으로 이동
itr1 = pattern1.iterator();
}
if((int)itr1.next() == answer) {
score1++;
}
if (!itr2.hasNext()) {
itr2 = pattern2.iterator();
}
if((int)itr2.next() == answer) {
score2++;
}
if (!itr3.hasNext()) {
itr3 = pattern3.iterator();
}
if((int)itr3.next() == answer) {
score3++;
}
}
if(score1 > score2) { //모든 경우의 수를 if로 구현
if(score1 > score3) {
int[] answer = {1};
return answer;
} else if(score1 < score3) {
int[] answer = {3};
return answer;
} else {
int[] answer = {1, 3};
return answer;
}
} else if(score1 < score2) {
if(score2 > score3) {
int[] answer = {2};
return answer;
} else if(score2 < score3) {
int[] answer = {3};
return answer;
} else {
int[] answer = {2, 3};
return answer;
}
} else {
if(score1 > score3) {
int[] answer = {1, 2};
return answer;
} else if(score1 < score3) {
int[] answer = {3};
return answer;
} else {
int[] answer = {1, 2, 3};
return answer;
}
}
}
}
잘 되긴 하는데
너무 무식하게 구현해서 부끄러운 코드다..