제가 작성한 풀이.. 실력도 없지만 자고 일어나서 딱 풀려고 하니 그냥 기능구현에만 매진한 것이 보이긴 한다..
public ArrayList<Integer> solution(int[] answers) {
ArrayList<Integer> answerList = new ArrayList<>();
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 num1 = 0;
int num2 = 0;
int num3 = 0;
int match1 = 0;
int match2 = 0;
int match3 = 0;
for (int ans : answers) {
if (ans == p1[num1]) {
match1++;
}
if (ans == p2[num2]) {
match2++;
}
if (ans == p3[num3]) {
match3++;
}
num1++;
num2++;
num3++;
if (num1 >= p1.length) {
num1 = 0;
}
if (num2 >= p2.length) {
num2 = 0;
}
if (num3 >= p3.length) {
num3 = 0;
}
}
int max = Integer.MIN_VALUE;
for (int maxAns : new int[]{match1, match2, match3}) {
max = Math.max(max, maxAns);
if (max == match1) {
answerList.add(1);
}
if (max == match2) {
answerList.add(2);
}
if (max == match3) {
answerList.add(3);
}
}
return answerList;
}
개선한 코드
public ArrayList<Integer> solution(int[] answers) {
ArrayList<Integer> answerList = new ArrayList<>();
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[] matches = new int[3]; // 각 수포자가 맞춘 문제 수
for (int i = 0; i < answers.length; i++) {
if (answers[i] == p1[i % p1.length]) {
matches[0]++;
}
if (answers[i] == p2[i % p2.length]) {
matches[1]++;
}
if (answers[i] == p3[i % p3.length]) {
matches[2]++;
}
}
int max = Math.max(matches[0], Math.max(matches[1], matches[2]));
for (int i = 0; i < matches.length; i++) {
if (matches[i] == max) {
answerList.add(i + 1); // 수포자 번호는 1부터 시작하므로 i + 1
}
}
return answerList;
}
각 배열을 다시 처음으로 돌아가서 시작하는걸 나머지를 통해 구현한 것이 보인다.. 다음에는 저렇게 하도록 해보자.
'코딩테스트' 카테고리의 다른 글
코딩테스트란? (0) | 2024.12.19 |
---|---|
프로그래머스 피보나치 수 (0) | 2024.12.02 |
프로그래머스 - 명예의 전당(1) (0) | 2024.11.27 |
HashMap을 이용한 빈도수 측정(숫자 짝궁) (0) | 2024.11.25 |