[프로그래머스] 모의고사 (java)

HaYeong Jang·2021년 2월 26일
0
post-thumbnail

🔗 문제링크

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

👩🏻‍💻 코드

import java.io.*;
import java.util.*;

class Solution {
    public int[] solution(int[] answers) {
        int[] answer = new int[3];
        List<Integer> first = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
        List<Integer> second = new ArrayList<>(Arrays.asList(2, 1, 2, 3, 2, 4, 2, 5));
        List<Integer> third = new ArrayList<>(Arrays.asList(3, 3, 1, 1, 2, 2, 4, 4, 5, 5));
        int[] cnt = new int[3];

        while (first.size() < answers.length) {
            first.addAll(first);
        }
        while (second.size() < answers.length) {
            second.addAll(second);
        }
        while (third.size() < answers.length) {
            third.addAll(third);
        }

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

        int max = 0;
        for (int i = 0; i < 3; i++) {
            max = Math.max(max, cnt[i]);
        }

        int idx = 0;
        for (int i = 0; i < 3; i++) {
            if (max == cnt[i]) {
                answer[idx++] = i + 1;
            }
        }

        answer = Arrays.copyOfRange(answer, 0, idx);
        return answer;
    }
}

- 다른 사람의 풀이 참고 후

import java.io.*;
import java.util.*;

class Solution {
    public int[] solution(int[] answers) {
        int[] answer = new int[3];
        int[] first = new int[]{1, 2, 3, 4, 5};
        int[] second = new int[]{2, 1, 2, 3, 2, 4, 2, 5};
        int[] third = new int[]{3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
        int[] cnt = new int[3];

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

        int max = Math.max(cnt[0], Math.max(cnt[1], cnt[2]));

        int idx = 0;
        for (int i = 0; i < 3; i++) {
            if (max == cnt[i]) {
                answer[idx++] = i + 1;
            }
        }

        answer = Arrays.copyOfRange(answer, 0, idx);
        return answer;
    }
}

📝 정리

처음에는 무작정 반복되는 숫자의 길이가 정답의 길이보다 짧을 경우 반복되는 숫자를 계속 이어붙여 주었다.
모듈러를 쓰는 방법을 미처 생각하지 못했는데, 반복되는 숫자가 계속 이어져 나오는 경우 모듈러를 사용하여야겠다.

profile
기억하기 위해 기록하는 개발로그👣

0개의 댓글