문제 풀이/프로그래머스

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

27200 2024. 4. 29. 15:22

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


import java.util.*;
class Solution {
    public int[] solution(int[] answers) {
        int first = 0, second = 0, third = 0;
        for(int i = 0; i < answers.length; i++){
            int cycle = i % 5;
            switch (cycle){
                case 0:
                    if(answers[i] == 1){
                        first++;
                    }
                    break;
                case 1:
                    if(answers[i] == 2){
                        first++;
                    }
                    break;
                case 2:
                    if(answers[i] == 3){
                        first++;
                    }
                    break;
                case 3:
                    if(answers[i] == 4){
                        first++;
                    }
                    break;
                case 4:
                    if(answers[i] == 5){
                        first++;
                    }
                    break;
            }
        }
        for(int i = 0; i < answers.length; i++){
            int cycle = i % 8;
            if(cycle % 2  == 0){
                if(answers[i] == 2){
                    second++;
                }
            }else{
                switch (cycle) {
                    case 1:
                        if (answers[i] == 1) {
                            second++;
                        }
                        break;
                    case 3:
                        if (answers[i] == 3) {
                            second++;
                        }
                        break;
                    case 5:
                        if (answers[i] == 4) {
                            second++;
                        }
                        break;
                    case 7:
                        if (answers[i] == 5) {
                            second++;
                        }
                        break;
                }
            }
        }

        for(int i = 0; i < answers.length; i++){
            int cycle = i % 10;
            switch (cycle){
                case 0:
                case 1:
                    if(answers[i] == 3){
                        third++;
                    }
                    break;
                case 2:
                case 3:
                    if(answers[i] == 1){
                        third++;
                    }
                    break;
                case 4:
                case 5:
                    if(answers[i] == 2){
                        third++;
                    }
                    break;
                case 6:
                case 7:
                    if(answers[i] == 4){
                        third++;
                    }
                    break;
                case 8:
                case 9:
                    if(answers[i] == 5){
                        third++;
                    }
                    break;
            }
        }
        ArrayList<Integer> arr = new ArrayList<>();
        int max = Math.max(first, second);
        max = Math.max(max, third);

        if(first == max) arr.add(1);
        if(second == max) arr.add(2);
        if(third == max) arr.add(3);
        
        Collections.sort(arr);
        int[] answer = new int[arr.size()];
        for(int i = 0 ; i < arr.size(); i++){
            answer[i] = arr.get(i);
        }
        
        return answer;
    }
}

 

다른 분들의 해답을 보면 2차원 배열을 만드는 등 다양한 방법이 있겠지만, switch문을 조금 사용하면 코드는 길어질지 몰라도 더욱 직관적이고 효율적이라고 판단했다. 

 

코드에서 중요했던 포인트는 int max를 구하기 위해 first,second를 먼저 비교하고 거기서 나온 max값을 다시 third와 비교하는 방식! 고등학교 수학 시간에 배웠겠지만 사용하면 효율적이다!