프로그래머스 - 모의고사 42840

2022. 6. 20. 20:40프로그래머스

문제 링크

코딩테스트 연습 - 모의고사 | 프로그래머스 (programmers.co.kr)

 

코딩테스트 연습 - 모의고사

수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는

programmers.co.kr

 

이 문제가 완전탐색에 속해 있는 이유는 answers 배열과 세 사람이 찍은 답을 모두 비교해야 하고, 각 사람마다 정답 갯수를 구한뒤에

또 그 정답갯수들 중 max값을 구해 정답갯수와 모두 비교해야 되기 때문이다.(완전 탐색이 2번이나 일어난다.)

 

우선 세 사람은 반복적으로 답을 찍게 된다. 답의 주기는 각각 5번, 8번 10번이다.

이 인덱스를 정답의 배열 answers와 비교를 하는데, 나머지 연산자(%) 를 사용해 주면 된다.

 

 

포인트

오름차순으로 정답을 정렬하여 나열하라고 되어있는데 그럴 필요가 없다. 제일 문제를 많이 맞춘 사람을 가려내면 되기 때문에 max값과 값이 일치하는 경우에만 초함해주면 될 것이다.

 

 

소스코드

public class Solution {
    public int[] solution(int[] answers){
        int[] a1 = new int[]{1,2,3,4,5}; // 5
        int[] a2 = new int[]{2,1,2,3,2,4,2,5}; // 8
        int[] a3 = new int[]{3,3,1,1,2,2,4,4,5,5}; // 10

        int[] num = new int[4];
        for(int i=0;i<answers.length;i++){
            if(a1[i%5] == answers[i]) num[1]++;
            if(a2[i%8] == answers[i]) num[2]++;
            if(a3[i%10] == answers[i]) num[3]++;
        }

        int max= 0, size =0;
        for(int i=1;i<=3;i++){
            if(max <= num[i]) {
                max = num[i];
            }
        }

        for(int i=1;i<=3;i++){
            if(max == num[i]) size++;
        }

        int ans[] = new int[size];
        int k=0;
        for(int i=1;i<=3;i++){
            if(max == num[i])
                ans[k++] = i;
        }

        return ans;
    }