모의고사


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

문제보기
Alt text

소스코드

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

class Solution {
    public static List<Integer> solution(int[] answers) {
        int[][] answerCntArr = getAnswerCnt(answers);

        List<Integer> resultList = new ArrayList<>();
        int max = Math.max(answerCntArr[0][1], Math.max(answerCntArr[1][1], answerCntArr[2][1]));

        for (int j = 0; j < answerCntArr.length; j++) {
            int[] result = answerCntArr[j];

            if (max == result[1]) {
                resultList.add(result[0]);
            }
        }

        return resultList;
    }

    private static int[][] getAnswerCnt(int[] answers) {
        int[][] answerCntArr = {{1, 0}, {2, 0}, {3, 0}};

        for (int i = 0; i < answers.length; i++) {
            int answer = answers[i];

            if (isCorrectNo1(i, answer)) answerCntArr[0][1] = answerCntArr[0][1] + 1;
            if (isCorrectNo2(i, answer)) answerCntArr[1][1] = answerCntArr[1][1] + 1;
            if (isCorrectNo3(i, answer)) answerCntArr[2][1] = answerCntArr[2][1] + 1;
        }

        return answerCntArr;
    }

    private static boolean isCorrectNo1(int questionNo, int answer) {
        int guess = (questionNo + 1) % 5;

        if (guess == 0) guess = 5;

        return answer == guess;
    }

    private static boolean isCorrectNo2(int questionNo, int answer) {
        int guess = -1;

        if (questionNo % 2 == 0) {
            guess = 2;
        } else {
            guess = (questionNo) % 8;

            if (guess == 5) guess--;
            else if (guess == 7) guess -= 2;
        }

        return answer == guess;
    }

    private static boolean isCorrectNo3(int questionNo, int answer) {
        int guess = -1;
        int index = questionNo % 10;

        switch (index) {
            case 0, 1:
                guess = 3;
                break;
            case 2, 3:
                guess = 1;
                break;
            case 4, 5:
                guess = 2;
                break;
            case 6, 7:
                guess = 4;
                break;
            case 8, 9:
                guess = 5;
                break;
        }

        return guess == answer;
    }
}