알고리즘/프로그래머스

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

jimkwon 2022. 2. 22. 14:36
반응형

문제 링크

https://programmers.co.kr/learn/courses/30/lessons/42840

 

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

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

programmers.co.kr

각 수포자가 문제를 찍는 규칙을 배열로 만들어둔다.

1번 수포자는 [1, 2, 3, 4, 5]

2번 수포자는 [2, 1, 2, 3, 2, 4, 2, 5]

3번 수포자는 [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]

 

정답과 해당 규칙을 비교해서 각각 정답 수를 count해주면 끝

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

class Solution {
    public int[] solution(int[] answers) {
        int[] answer = {0, 0, 0};
        int[] one = {1, 2, 3, 4, 5};
        int[] two = {2, 1, 2, 3, 2, 4, 2, 5};
        int[] three = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
        ArrayList<Integer> ans = new ArrayList<>();
        
        for (int i = 0; i < answers.length; i++) {
            if (answers[i] == one[i % 5])
                answer[0]++;
            if (answers[i] == two[i % 8])
                answer[1]++;
            if (answers[i] == three[i % 10])
                answer[2]++;
        }
        int[] max = Arrays.copyOfRange(answer, 0, 3);
        Arrays.sort(max);
        for (int i = 0; i < 3; i++) {
            if (answer[i] == max[2])
                ans.add(i + 1);
        }
        int [] ret = new int[ans.size()];
        for (int i = 0; i < ans.size(); i++)
            ret[i] = ans.get(i);
        return ret;
    }
}

단, 높은 점수가 동률일 경우 오름차순으로 정렬해서 보내줘야 하므로

반복문을 오름차순 기준으로 두어 수포자의 점수와 높은 점수를 비교하여 ArrayList에 수포자를 넣는다.