알고리즘(Algorithm)/프로그래머스(Programmers)

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

나아가는중 2021. 10. 19. 22:54
반응형

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

문제 설명

  1. 수포자 삼인방은 모의고사에서 수학 문제를 전부 찍으려 한다.
  2. 1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어진다.
  3. 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 retrun.

제한 조건

  1. 시험은 최대 10,000 문제로 구성되어있습니다.
  2. 문제의 정답은 1, 2, 3, 4, 5중 하나입니다.
  3. 가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬해주세요.

문제 풀이

  1. 수포자 삼인방이 찍는 방식의 반복되는 패천을 찾아 저장.
  2. 수포자 별로 answers에서 몇개의 정답을 맞힌지 저장.
  3. 가장 많이 맞힌 점수를 찾음.
  4. 가장 많은 문제를 맞힌 사람이 누구인지 리스트에 저장
  5. 배열에 담아 return

소스 코드

import java.util.*;

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

        int[] scores = new int[3];

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

        int max = Math.max(scores[0], Math.max(scores[1], scores[2])); // 3

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

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

        return answer;
    }
}
반응형