[PGS] 모의고사 - JAVA

최영환·2023년 8월 28일
0

Programmers

목록 보기
29/43

💡 문제

💬 입출력 예시

📌 풀이(소스코드)

import java.util.*;

class Solution {
    public int[] solution(int[] answers) {
        List<Integer> answer = new ArrayList<>();
        // 정답 개수
        int[] counts = new int[3];
        
        // 1~3번 수포자의 찍는 방식
        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};

        // 채점
        for (int i = 0; i < answers.length; i++) {
            if (answers[i] == one[i % one.length]) {
                counts[0]++;
            }
            if (answers[i] == two[i % two.length]) {
                counts[1]++;
            }
            if (answers[i] == three[i % three.length]) {
                counts[2]++;
            }
        }
        
        // 최댓값 탐색
        int max = Integer.MIN_VALUE;
        for (int i = 0; i < counts.length; i++) {
            max = Math.max(max, counts[i]);
        }
        // 최댓값 번호를 answer 리스트에 추가(자동으로 오름차순으로 정렬됨)
        for (int i = 0; i < counts.length; i++) {
            if (counts[i] == max) {
                answer.add(i+1);
            }
        }
        return answer.stream().mapToInt(i -> i).toArray();
    }
}

📄 해설

접근

  • 수포자의 찍는 방식의 패턴을 파악하고, 이를 이용하면 된다.
  • 채점 할 때, 찍는 패턴이 존재하므로, 나머지 연산을 통해 인덱스를 잘 계산해줘야함.
  • 최댓값(가장 높은 점수)을 찾고, 최댓값인 수포자를 찾아서 반환해주면 된다.

과정

  • 가장 많은 문제를 맞힌 사람은 한명일수도 있고 여러명일 수 있으므로, Listanswer 을 선언한다.
  • 맞은 문제 개수를 저장할 배열 counts 를 선언하고, 1~3번 수포자의 찍는 방식의 패턴인 one, two, three 를 선언한다.
  • 문제의 정답을 맞히면 각각의 counts 값을 증가시킨다. 이 때, 찍기 패턴 배열의 인덱스를 나머지 연산을 통해 잘 조절해야한다.
  • 채점이 끝나면, counts 배열에서 최댓값을 찾는다.
  • 최댓값을 찾고나면, counts 배열에서 최댓값인 인덱스 번호 + 1 을 answer 리스트에 추가한다.
profile
조금 느릴게요~

0개의 댓글