본문 바로가기

Coding Test/프로그래머스

[프로그래머스/자바] 모의고사

import java.util.ArrayList;
import java.util.List;

class Solution {
    public int[] solution(int[] answers) {
        int[] student1 = {1, 2, 3, 4, 5};
        int[] student2 = {2, 1, 2, 3, 2, 4, 2, 5};
        int[] student3 = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};

        int[] score = {0, 0, 0};

        for(int i=0; i<answers.length; i++) {
            if(answers[i] == student1[i % 5]) score[0]++;
            if(answers[i] == student2[i % 8]) score[1]++;
            if(answers[i] == student3[i % 10]) score[2]++;
        }

        int max = Math.max(score[0], Math.max(score[1], score[2]));

        List<Integer> list = new ArrayList<>();
        for(int i=0; i<score.length; i++) {
            if(max == score[i]) list.add(i+1);
        }

        int[] answer = new int[list.size()];
        for(int i=0; i<answer.length; i++) {
            answer[i] = list.get(i);
        }

        return answer;
    }
}

처음에는 student1(int length) {} ... 메서드를 각각 만들어서 answers의 길이에 맞는 int 배열을 리턴한 뒤, answers의 값과 비교하도록 했다. 그런데 같은 패턴이 반복되는데 굳이 answers의 길이에 맞게 요소를 전부 만들 필요는 없다는 생각이 들어서, 결론적으로 위와 같이 코드를 구현했다.