본문 바로가기

Programmers

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

📌 문제

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

💻 코드

package programmers;

import java.util.Arrays;

public class Lv1_220705_2 { // 모의고사
// 도움 코드
    public static void main(String[] args) {
        int[] answer = {1, 3, 2, 4, 2};
        System.out.println(Arrays.toString(solution(answer)));

    }

    public static int[] solution(int[] answers) {
        int[] answer; // 1
        int[] first = {1, 2, 3, 4, 5};
        int[] second = {2, 1, 2, 3, 2, 4, 2, 5};
        int[] third = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};

        int[] score = new int[3];

        for (int i = 0; i < answers.length; i++) { // 2
            if (first[i % first.length] == answers[i]) {
                score[0]++;
            }
            if (second[i % second.length] == answers[i]) {
                score[1]++;
            }
            if (third[i % third.length] == answers[i]) {
                score[2]++;
            }
        }

        int max = 0; // 3 가장 높은 점수 구하기
        for (int k : score) {
            if (k > max) {
                max = k;
            }
        }

        int maxCount = 0; // 4 가장 높은 점수를 받은 사람 구하기
        for (int j : score) {
            if (j == max) {
                maxCount++;
            }
        }
        
        answer = new int[maxCount]; // 5
        int index = 0;
        for (int i = 0; i < score.length; i++) {
            if (score[i] == max) {
                answer[index++] = i + 1;
            }
        }

        return answer;
    }
}

📑 풀이

  1. 문제에 수포자 3명이라고 적혀있으므로 각각 배열을 만들어 배열에 똑같은 숫자가 반복하기 전까지 숫자를 저장한다.
  2. 크기가 3인 배열을 하나 생성하고 몇 개의 점수가 맞았는지 각 인덱스에 저장.
  3. max라는 변수를 생성하고 저장한 값 중에 가장 큰 수 찾아 max에 저장
  4. maxCount 변수를 생성하고 가장 점수가 높은 사람 인덱스와 동일한 값을 찾기 위해 max 값과 같은지 찾고 값이 같으면 maxCount++
  5. 리턴할 배열에 maxCount 만큼 크기 저장하고 동일한 값을 가지고 있으면 리턴할 배열에 index++ 하고 값 대입 (i + 1)