[Programmers] 모의고사

iinnuyh_s·2024년 1월 4일
0

Programmers

목록 보기
6/8
post-thumbnail

모의고사

풀이

  • 레벨 1으로 쉬운 구현. 근데,,, 나이가 들어서 그런지 눈이 침침한가 보다 ^^ 자꾸 이상한걸 써놔서 틀리네 🤧🤧
  • 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번 수포자가 맞은 카운트를 늘려준다.
  • 카운트 다 늘린 뒤에, n명의 수포자 중 가장 많이 맞은 카운트를 구하고,
  • 최대 카운트 값을 갖고 있는 수포자들을 answer 배열에 넣어주었다.

😇 정답 코드

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를 배열로 변환해볼까? 한다면 코드가 훨씬 깔끔해진다.

휴^^;; 항상 사람들 코드를 보면 현타가 오지만..힘을내..!🙏

0개의 댓글