본문 바로가기
Coding Test/Programmers

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

‘프로그래머스 코딩테스트 고득점 Kit’ 문제 입니다. 😀

문제 👉 <코딩테스트 연습 - 모의고사 | 프로그래머스>

1. 문제

1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 한다.

수포자 찍는 방식
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, ...

가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬해주세요.

2. 풀이

완전탐색 을 이용한 문제 풀이

  1. 모든 수포자의 찍는 방식의 패턴을 배열로 저장한다.
  2. 모든 문제에 대한 수포자들의 점수를 배열에 저장한다.
  3. 수포자들의 점수 중 최고점수를 찾는다.
  4. 최고점수와 일치하는 수포자의 번호를 배열에 추가 후 return한다.

3. 코드

import java.util.*;
class Solution {
    public int[] solution(int[] answer) {
        int[] a1 = {1, 2, 3, 4, 5};
        int[] a2 = {2, 1, 2, 3, 2, 4, 2, 5};
        int[] a3 = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
        int[] scores = new int[3];

        // score
        for (int i=0; i<answer.length; i++) {
            if (answer[i] == a1[i % a1.length]) { scores[0]++; }
            if (answer[i] == a2[i % a2.length]) { scores[1]++; }
            if (answer[i] == a3[i % a3.length]) { scores[2]++; }
        }

        // find max value in array
        int maxScore = Arrays.stream(scores).max().getAsInt();
        // add index with maxScore
        ArrayList<Integer> list = new ArrayList<>();
        for (int i=0; i<scores.length; i++) {
            if (maxScore == scores[i]) { list.add(i+1); }
        }
        // list -> array
        return list.stream().mapToInt(Integer::intValue).toArray();
    }
}


References


🏋🏻 개인적으로 공부한 내용을 기록하고 있습니다.
잘못된 부분이 있다면 과감하게 지적해주세요!! 🏋

댓글