모의고사

유재경·2020년 9월 17일
0

#2020. 09. 17

문제 설명

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

1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ...
2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ...
3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ...

1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성해주세요.

제한 사항

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

입출력 예

answersreturn
[1, 2, 3, 4, 5][1]
[1, 3, 2, 4, 2][1, 2, 3]

풀이

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

class Solution {
    public int[] solution(int[] answers) {
        int[] answer = {};
        int[] supo1 = {1, 2, 3, 4, 5};
        int[] supo2 = {2, 1, 2, 3, 2, 4, 2, 5};
        int[] supo3 = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
        int score[] = new int[3];
        for(int i = 0; i < answers.length; i++) {
            if(answers[i] == supo1[i % 5]) score[0]++;
            if(answers[i] == supo2[i % 8]) score[1]++;
            if(answers[i] == supo3[i % 10]) score[2]++;
        }
        int max = Math.max(Math.max(score[0], score[1]), score[2]);
        ArrayList<Integer> arr = new ArrayList<>();
        for(int i = 0; i < score.length; i++) {
            if(max == score[i]) arr.add(i + 1);
        }
        answer = new int[arr.size()];
        for(int i = 0; i < arr.size(); i++) {
            answer[i] = arr.get(i);
        }
        Arrays.sort(answer);
        return answer;
    }
}

생각보다 오랜 시간이 걸려서 풀었습니다. 수포자들의 찍는 규칙들을 생각해보려다가... 너무 생각이 복잡해져서, 배열에 넣었습니다.😣 배열에 넣으니 훨씬 편하더군요.
수포자가 3명뿐이니 score 배열도 크기를 3으로 제한했습니다.
정답 배열 answers의 각 인덱스에 있는 정답이, 각 수포자들이 제출한 답과 같으면, score 배열에 수포자 순서대로 점수를 올려주는식입니다.
점수 배열에서 최고점을 Math.max를 통해서 구하고, 최고점과 같은 점수들을 리턴해줄 배열에 넣었습니다. 여러명일 경우 오름차순이기 때문에 Arrays.sort를 이용하여 배열을 정렬했습니다!

profile
차근차근히 시작해보는 velog

0개의 댓글