Hayden's Archive

[알고리즘] 프로그래머스 : 모의고사 본문

Algorithm

[알고리즘] 프로그래머스 : 모의고사

_hayden 2020. 5. 19. 21:38

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

 

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

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

programmers.co.kr

 


내가 작성한 코드

수포자 3명의 찍기 패턴을 p1, p2, p3에 다음과 같이 배열로 담는다. p1은 반복주기가 5, p2는 반복주기가 8, p3는 반복주기가 10이므로 입력되는 인자 배열 answers의 인덱스를 반복주기로 나눈 나머지 인덱스와 맞춰서 값을 비교하면 된다. 그리고 int[] 배열인 count를 둬서 p1이 맞힌 횟수(count[0]), p2가 맞힌 횟수(count[1]), p3가 맞힌 횟수(count[2])을 입력해가고  count[3]은 최종적으로 반환할 answer의 길이를 입력하기 위해 남겨둔다.

원래는 ArrayList를 통해 입력하고자 했으나 그냥 길이가 3인 배열을 만들었고 인덱스를 오름차순으로 for문을 돌려 최댓값과 동일할 경우 1,2,3 순서로 int[] 배열 answer에 입력된다.(그러므로 따로 오름차순으로 정렬할 필요가 없다!) 만일 가장 많이 맞힌 사람이 1명이나 2명밖에 없는 경우 배열의 자리가 남게 되므로 반환값은 answer를 0번째 인덱스부터 answer의 실질적인 길이까지(정확히는 count[3])까지(배열 answer를 복사할 건데 정확히는 처음 인덱스부터 두번째 인자값으로 작성한 인덱스 바로 앞까지) 복사한 배열로 하면 된다.

import java.util.Arrays;
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[] count = new int[4];
        for(int i = 0; i < answers.length; i++){
            if(answers[i] == p1[i%5]) count[0]++;
            if(answers[i] == p2[i%8]) count[1]++;
            if(answers[i] == p3[i%10]) count[2]++;
        }
        int[] answer = new int[3];
        for(int i = 0; i < 3; i++){
            if(Math.max(Math.max(count[0], count[1]), count[2]) == count[i]){
                answer[count[3]++] = i+1;
            }
        }
        return Arrays.copyOf(answer, count[3]);
    }
}