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