import java.util.*;
class Solution {
public int[] solution(int[] answers) {
int[] ans = {};
int case1= 0;
int case2 = 0;
int case3 = 0;
int cnt1= 0;
int cnt2=0;
int cnt3=0;
for(int i=0;i<answers.length;i++){
case1 = i%5 +1;
if(i%2==0) case2 = 2;
else if(i%8 == 1) case2 = 1;
else if(i%8 == 3) case2 = 3;
else if(i%8 == 5) case2 = 4;
else if(i%8 == 7) case2 = 5;
if(i%10==0||i%10==1) case3 = 3;
else if(i%10==2||i%10==3) case3 = 1;
else if(i%10==4||i%10==5) case3 = 2;
else if(i%10==6||i%10==7) case3 = 4;
else if(i%10==8||i%10==9) case3 = 5;
if(answers[i] == case1) cnt1++;
if(answers[i] == case2) cnt2++;
if(answers[i] == case3) cnt3++;
}
ArrayList<Integer> list = new ArrayList<>();
if(cnt1 == cnt2 && cnt2 == cnt3) {
ans = new int[3];
ans[0]= 1;
ans[1]= 2;
ans[2]= 3;
}
else {
int m = Math.max(Math.max(cnt1,cnt2),cnt3); // ❗
if(cnt1 == m) list.add(1);
if(cnt2 == m) list.add(2);
if(cnt3 == m) list.add(3);
int size = 0;
ans = new int[list.size()];
for (int i : list) ans[size++] = i;
}
return ans;
}
}
나는 규칙을 직접 세웠지만?? 다른사람들은 아래의 patterns 와 같이 반복되는 것만 도출해서 구하였다. 이 생각은 왜 안했을까..
그리고 Math.max(a,b)는 a,b 이렇게 두개의 수의만 비교할 수 있는데 메소드안에 또 max를 이용하면 세개 이상 비교할 수 있다
import java.util.*;
class Solution {
public static int[] solution(int[] answers) {
int[][] patterns = { // ❗
{1, 2, 3, 4, 5},
{2, 1, 2, 3, 2, 4, 2, 5},
{3, 3, 1, 1, 2, 2, 4, 4, 5, 5}
};
int[] hit = new int[3];
for(int i = 0; i < hit.length; i++) {
for(int j = 0; j < answers.length; j++) {
if(patterns[i][j % patterns[i].length] == answers[j]) hit[i]++;
}
}
int max = Math.max(hit[0], Math.max(hit[1], hit[2]));
List<Integer> list = new ArrayList<>();
for(int i = 0; i < hit.length; i++)
if(max == hit[i]) list.add(i + 1);
int[] answer = new int[list.size()];
int cnt = 0;
for(int num : list)
answer[cnt++] = num;
return answer;
}
}