import java.util.*;
class Solution {
    private static final int[] A = {1,2,3,4,5};
    private static final int[] B = {2,1,2,3,2,4,2,5};
    private static final int[] C = {3,3,1,1,2,2,4,4,5,5};
    public int[] solution(int[] answers) {
        int idxA = 0;
        int idxB = 0;
        int idxC = 0;
        int[] ansCnt = new int[3];
        for(int answer : answers){
            if(A[idxA] == answer){
                ansCnt[0]++;
            }
            if(B[idxB] == answer){
                ansCnt[1]++;
            }
            if(C[idxC] == answer){
                ansCnt[2]++;
            }
            idxA = (idxA+1)%5;
            idxB = (idxB+1)%8;
            idxC = (idxC+1)%10;
        }
        int max = -1;
        for(int c : ansCnt){
            max = Math.max(max,c);
        }
        List<Integer> list = new ArrayList<>();
        for(int i=0;i<3;i++){
            if(ansCnt[i] == max){
                list.add(i);
            }
        }
        
        int[] a = new int[list.size()];
        for(int i=0;i<a.length;i++){
            a[i] = list.get(i)+1;
        }
        return a;
    }
}
import java.util.*;
import java.util.stream.*;
class Solution {
    private static final int[][] RULES = {
        {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[] corrects = new int[3];
        int max = 0;
        
        for(int problem=0;problem<answers.length;problem++){
            int answer = answers[problem];
            
            for(int person = 0;person<3;person++){
                if(getPicked(person, problem) == answer){
                    if(++corrects[person]>max){
                        max = corrects[person];
                    }
                }
            }
        }
        
        final int maxCorrects = max;
        return IntStream.range(0,3)
            .filter(i->corrects[i] == maxCorrects)
            .map(i->i+1)
            .toArray();
    }
    
    private int getPicked(int person, int problem){
        int[] rule = RULES[person];
        int index = problem%rule.length;
        return rule[index];
    }
}