문제풀이/코딩테스트

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

gyungmean 2022. 2. 24. 14:03

문제출처

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

 

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

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

programmers.co.kr

쉬운 문제라고 생각했는데 테스트 케이스 하나가 계속 통과가 안돼서 조금 애 먹었던 문제

 

수포자 1, 2, 3은 모두 동일한 패턴으로 정답을 작성하고 있으므로 각각의 패턴을 배열로 만든다.

정답과 비교하며 점수를 계산

점수를 비교하여 최고값을 가진 학생들을 묶어서 배열로 반환

 

접근 방법은 이렇게 했고 정답코드는 아래처럼 작성했다.

import java.util.*;
class Solution {
    public int[] solution(int[] answers) {
        int[] p1 = {1, 2, 3, 4, 5};
        int[] p2 = {2, 1, 2, 3, 2, 4, 2, 5};
        int[] p3 = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
        
        int[] scores = {0, 0, 0};
       
        for(int i = 0; i < answers.length; i++){
            if(answers[i] == p1[i % 5]){ scores[0]++; }
            if(answers[i] == p2[i % 8]){ scores[1]++; }
            if(answers[i] == p3[i % 10]){ scores[2]++; }
        }
        
        int[] tmp = {scores[0], scores[1], scores[2]};
        Arrays.sort(tmp);
        List<Integer> answer_list = new ArrayList<>();
        for(int i = 0; i < 3; i++){
            if(scores[i] == tmp[2]){ answer_list.add(i + 1); }
        }
        
        int[] answer = new int[answer_list.size()];
        for(int i = 0; i < answer_list.size(); i++){
            answer[i] = answer_list.get(i);
        }
        return answer;
    }
}

프로그래머스는 테스트 값을 제공하지 않아서 정확하게 알 수는 없지만 우선 나의 경우에 하나 통과하지 못 했던 케이스는 내가 연산자를 오타내서 그런거 였다;;

이런 문제 풀 때는 내가 빠트린 경우의 수가 있는지 꼼꼼하게 확인할 필요가 있는듯하다.