모의고사

J·2021년 4월 6일
0

코딩테스트 연습

목록 보기
23/28
post-thumbnail

내코드

import java.util.*;

class Solution {
    public int[] solution(int[] answers) {
        int[] ans = {};
        int case1= 0;
        int case2 = 0;
        int case3 = 0;

        int cnt1= 0;
        int cnt2=0;
        int cnt3=0;

        for(int i=0;i<answers.length;i++){
            case1 = i%5 +1;

            if(i%2==0) case2 = 2;
            else if(i%8 == 1) case2 = 1;
            else if(i%8 == 3) case2 = 3;
            else if(i%8 == 5) case2 = 4;
            else if(i%8 == 7) case2 = 5;

            if(i%10==0||i%10==1) case3 = 3;
            else if(i%10==2||i%10==3) case3 = 1;
            else if(i%10==4||i%10==5) case3 = 2;
            else if(i%10==6||i%10==7) case3 = 4;
            else if(i%10==8||i%10==9) case3 = 5;

            if(answers[i] == case1) cnt1++;
            if(answers[i] == case2) cnt2++;
            if(answers[i] == case3) cnt3++;
        }
        ArrayList<Integer> list = new ArrayList<>();

        if(cnt1 == cnt2 && cnt2 == cnt3) {
            ans = new int[3];
            ans[0]= 1;
            ans[1]= 2;
            ans[2]= 3;
        }
        else {
            int m = Math.max(Math.max(cnt1,cnt2),cnt3); // ❗

            if(cnt1 == m)  list.add(1);
            if(cnt2 == m) list.add(2);
            if(cnt3 == m) list.add(3);

            int size = 0;
            ans = new int[list.size()];
            for (int i : list) ans[size++] = i;
        }

        return ans;
    }
}

나는 규칙을 직접 세웠지만?? 다른사람들은 아래의 patterns 와 같이 반복되는 것만 도출해서 구하였다. 이 생각은 왜 안했을까..
그리고 Math.max(a,b)는 a,b 이렇게 두개의 수의만 비교할 수 있는데 메소드안에 또 max를 이용하면 세개 이상 비교할 수 있다


다른 사람

import java.util.*;

class Solution {
    public static int[] solution(int[] answers) {
        int[][] patterns = { // ❗
                {1, 2, 3, 4, 5},
                {2, 1, 2, 3, 2, 4, 2, 5},
                {3, 3, 1, 1, 2, 2, 4, 4, 5, 5}
        };

        int[] hit = new int[3];
        for(int i = 0; i < hit.length; i++) {
            for(int j = 0; j < answers.length; j++) {
                if(patterns[i][j % patterns[i].length] == answers[j]) hit[i]++;
            }
        }

        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;
    }
}

0개의 댓글