본문 바로가기
PS/Programmers

[자바] 프로그래머스 - 모의고사 [코딩테스트 연습 Lv1]

by Nahwasa 2022. 4. 8.

문제 : programmers-모의고사

 

 

  주어진 대로 구현을 하면 된다. 반복문과 배열만 다룰 줄 안다면 풀 수 있다. 이 때 1번, 2번, 3번 수포자의 공통된 부분의 길이가 서로 다른 부분(각각 5, 8, 10)에서 좀 어려울 수 있다. 각자 다른 index 변수를 사용해서 해당 배열의 크기가 됬다면 0으로 변경하는 방식으로 하거나, 3명의 공통부분 길이의 최소공배수인 40번 만큼 배열에 적어둔 후 풀면 쉽게 할 수 있다. 코드적으로 이해가 될 것 같다면 아래와 같이 %(나머지 연산)를 사용해 더 편하게 할 수 있다. 

 

 

코드 : github

/**
 * 문제 출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges
 */
class Solution {
    private static final int[][] ARR = {
            {1,2,3,4,5},
            {2,1,2,3,2,4,2,5},
            {3,3,1,1,2,2,4,4,5,5}
    };
    public int[] solution(int[] answers) {
        int[] cnt = new int[3];
        for (int i = 0; i < answers.length; i++) {
            for (int j = 0; j < 3; j++) {
                if (answers[i] == ARR[j][i%ARR[j].length])
                    cnt[j]++;
            }
        }
        int max = 0;
        int maxCnt = 0;
        for (int i = 0; i < 3; i++) {
            if (max < cnt[i]) {
                max = cnt[i];
                maxCnt = 1;
            } else if (max == cnt[i]) {
                maxCnt++;
            }
        }
        int idx = 0;
        int[] answer = new int[maxCnt];
        for (int i = 0; i < 3; i++) {
            if (cnt[i] == max) {
                answer[idx++] = i+1;
            }
        }

        return answer;
    }
}

댓글