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={1,2,3,4,5}
등으로 받은 정답 배열을 for문으로 돌리면서, if(answers[t]==arr[t%(n번수포자 배열 길이)]
면 n번 수포자가 맞은 카운트를 늘려준다.😇 정답 코드
import java.util.*; import java.io.*; class Solution { public int[] solution(int[] answers) { int[] answer = {}; ArrayList<int[]> arrList = new ArrayList<>(); arrList.add(new int[]{1,2,3,4,5}); arrList.add(new int[]{2,1,2,3,2,4,2,5}); arrList.add(new int[]{3,3,1,1,2,2,4,4,5,5}); int[] result = new int[3]; int maxResult = 0; for(int j=0;j<3;j++){ //0:첫번째, 1:두번째, 2:세번째 int correct = 0; int[] arr = arrList.get(j); int size = arr.length; for(int t=0;t<answers.length;t++){ if(answers[t]==arr[t%size]){ correct++; } } result[j] = correct; maxResult = Math.max(maxResult,correct); } if(maxResult==0){ answer = new int[]{1,2,3}; return answer; } int cnt = 0; for(int s:result){ if(s==maxResult){ cnt++; } } answer = new int[cnt]; int answerIdx=0; for(int idx=0;idx<3;idx++){ if(result[idx]==maxResult){ answer[answerIdx++]=idx+1; } } return answer; } }
- 지금보니까... 왜 ArrayList를 굳이 만들어서 넣었을까???2차원 배열로 할 수 있는데... 2차원 배열로 하면 코드가 더 깔끔해진다.
- 다른 사람들 코드 보니까 나랑 ... 생각한 건 비슷한데 엄청 간단하게 구현하셨다...😇
예를 들면, 나는 최댓값이랑 같은 애가 몇개인지를 구해야 answer 배열의 크기를 정할 수 있으니까 result 배열을 또 for문 돌리면서 최댓값이랑 같은 애들을 세줬는데,int maxScore = Math.max(score[0], Math.max(score[1], score[2])); ArrayList<Integer> list = new ArrayList<>(); if(maxScore == score[0]) {list.add(1);} if(maxScore == score[1]) {list.add(2);} if(maxScore == score[2]) {list.add(3);} return list.stream().mapToInt(i->i.intValue()).toArray();
또는
int max = Math.max(hit[0], Math.max(hit[1], hit[2])); List<Integer> list = new ArrayList<>(); for(int i = 0; i < hit.length; i++) if(max == hit[i]) list.add(i + 1); int[] answer = new int[list.size()]; int cnt = 0; for(int num : list) answer[cnt++] = num; return answer;
이런 식으로 ArrayList를 배열로 변환해볼까? 한다면 코드가 훨씬 깔끔해진다.
휴^^;; 항상 사람들 코드를 보면 현타가 오지만..힘을내..!🙏