class Solution {
public int[] solution(int[] answers) {
//정답의 개수를 담을 int 선언
int count1 = 0;
int count2 = 0;
int count3 = 0;
//정답을 주기대로 반복하는 배열 선언
//1번과 3번은 10개씩, 2번은 8개씩 반복으로 처리한다.
int[] answer1 = {1,2,3,4,5,1,2,3,4,5};
int[] answer2 = {2,1,2,3,2,4,2,5};
int[] answer3 = {3,3,1,1,2,2,4,4,5,5};
//제출한답의 번호를 체크할 int는 i를 복사하여 10으로 나눈 나머지를 사용한다.
for(int i=0;i<answers.length;i++){
int answerCheck = i;
while(answerCheck>=10){
answerCheck-=10;
}
if(answers[i]==answer1[answerCheck]){count1++;}
if(answers[i]==answer3[answerCheck]){count3++;}
}
for(int i=0;i<answers.length;i++){
int answerCheck = i;
while(answerCheck>=8){
answerCheck-=8;
}
if(answers[i]==answer2[answerCheck]){count2++;}
}
//가장 큰 수를 찾고, 큰 수의 개수를 기록한다.
int biggest = 0;
int biggestCount = 0;
if(biggest<count1){
biggest=count1; biggestCount=1;
}
if(biggest<count2){
biggest=count2; biggestCount=1;
}else if(biggest==count2){
biggestCount++;
}
if(biggest<count3){
biggest=count3; biggestCount=1;
}else if(biggest==count3){
biggestCount++;
}
//큰수의 개수만큼 int배열을 만들어준다.
int[] answer = new int[biggestCount];
//가장 큰 수가 따로 등장하지 않았다면 모두 0개로 동점처리하기위해 1,2,3을 모두 담은 것을 미리 return
if(biggest==0){return new int[]{1,2,3};}
//해당하는 번호를 answer에 담아주며, 위치를 i++을 이용해 옮겨준다.
int i=0;
if(biggest==count1){answer[i]=1;i++;}
if(biggest==count2){answer[i]=2;i++;}
if(biggest==count3){answer[i]=3;i++;}
return answer;
}
}
탐색을 할때 논리를 만들어가는 과정이나, 조금 더 다듬어 깔끔한 풀이를 만들 수 있을 것 같다.
실력이 쌓이면 더 간결한 풀이로 답을 낼 수 있도록 도전해 봐야겠다.
※런타임에러가 발생했다.
런타임에러는 주로 수의 범위가 말이 되지 않는 상황에서 발생하는 것으로 배웠다.
이번에는
for(int i=0;i<answers.length;i++){
int answerCheck = i;
while(answerCheck>=10){
answerCheck-=10;
}
if(answers[i]==answer1[answerCheck]){count1++;}
if(answers[i]==answer3[answerCheck]){count3++;}
}
이 부분에서 answerCheck가 10보다 클때만 10을 빼도록 했더니 10이 answer1에 들어가게되어 index범위인 0~9를 벗어나 이런 일이 발생한 것으로 보인다.
논리를 너무 길게정해서 발생한것보다는 index 범위를 벗어난것이 주된 원인이니 다음엔 빠르게 원인을 찾는 연습을 해야겠다.
'Coding Test > JAVA 코딩테스트 풀이정리(프로그래머스)' 카테고리의 다른 글
프로그래머스 스쿨 Lv.1 - 소수만들기 (0) | 2023.12.13 |
---|---|
프로그래머스 스쿨 Lv.1 - 카드뭉치 (0) | 2023.12.12 |
프로그래머스 스쿨 Lv.1 - 옹알이(2) (0) | 2023.12.12 |
프로그래머스 스쿨 Lv.0 - 등수 매기기 (0) | 2023.11.19 |
프로그래머스 스쿨 Lv.0 - 가까운수 (0) | 2023.11.19 |