완전탐색
모의고사
def solution(answers):
    answer = []
    
    person1 = [1, 2, 3, 4, 5]
    person2 = [2, 1, 2, 3, 2, 4, 2, 5]
    person3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
    
    count1 = 0
    count2 = 0
    count3 = 0
    
    for i in range(len(answers)):
        if answers[i] == person1[i % len(person1)]:
            count1 += 1
        if answers[i] == person2[i % len(person2)]:
            count2 += 1
        if answers[i] == person3[i % len(person3)]:
            count3 += 1
            
    tmp = [count1, count2, count3]
    max_count = max(tmp)  
    
    for i, score in enumerate(tmp):
        if score == max_count:
            answer.append(i + 1) 
    return answer
answers의 인덱스/각 리스트 사이즈 한 값을 인덱스로 넣어주면 list에 해당하는 값이 반복적으로 나오게 할 수 있다. 이걸 어떻게 표현할지 모르겠어서 계속 고민했다. 이런 패턴은 자주 등장 할 거 같으니 꼭 알아둬야 겠다.
def solution(answers):
    pattern1 = [1,2,3,4,5]
    pattern2 = [2,1,2,3,2,4,2,5]
    pattern3 = [3,3,1,1,2,2,4,4,5,5]
    score = [0, 0, 0]
    result = []
    for idx, answer in enumerate(answers):
        if answer == pattern1[idx%len(pattern1)]:
            score[0] += 1
        if answer == pattern2[idx%len(pattern2)]:
            score[1] += 1
        if answer == pattern3[idx%len(pattern3)]:
            score[2] += 1
    for idx, s in enumerate(score):
        if s == max(score):
            result.append(idx+1)
    return result
count 변수를 각각 선언하지 말고 score 배열을 만들어서 저장하는 것이 훨씬 효율적이다.
import java.util.ArrayList;
import java.util.List;
class Solution {
    public int[] solution(int[] answers) {
        List<Integer> result = new ArrayList<>();
        int[] pattern1 = {1, 2, 3, 4, 5};
        int[] pattern2 = {2, 1, 2, 3, 2, 4, 2, 5};
        int[] pattern3 = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
        
        int[] score = new int[3];
        
        for (int i = 0; i < answers.length; i++) {
            if (answers[i] == pattern1[i % pattern1.length]) {
                score[0] += 1;
            }
            if (answers[i] == pattern2[i % pattern2.length]) {
                score[1] += 1;
            }
            if (answers[i] == pattern3[i % pattern3.length]) {
                score[2] += 1;
            }
        }
        
        // 최댓값 초기화
        int maxScore = score[0];
        // 배열을 순회하면서 최댓값 찾기
        for (int i = 1; i < score.length; i++) {
            if (score[i] > maxScore) {
                maxScore = score[i];
            }
        }
        
        // 최댓값의 인덱스 찾기
        for (int idx = 0; idx < score.length; idx++) {
            if (score[idx] == maxScore) {
                result.add(idx + 1);
            }
        }
  
        // List를 int[] 배열로 변환
        int[] answer = new int[result.size()];
        for (int i = 0; i < result.size(); i++) {
            answer[i] = result.get(i);
        }
        
        return answer;
    }
}
인덱스 구하는 부분 음.. 너무 길어졌는데 어쩔 수 없는듯
int maxScore = Math.max(score[0], score[1], score[2]);
처음에 이렇게 작성했는데 Math.max() 메서드는 두 개의 인수를 비교하는 메서드라 세 개 이상의 값을 한 번에 비교할 수 없다고 한다. 그래서 저렇게 반복문으로 처리했다. 
import java.util.ArrayList;
class Solution {
    public int[] solution(int[] answer) {
        int[] a = {1, 2, 3, 4, 5};
        int[] b = {2, 1, 2, 3, 2, 4, 2, 5};
        int[] c = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
        int[] score = new int[3];
        for(int i=0; i<answer.length; i++) {
            if(answer[i] == a[i%a.length]) {score[0]++;}
            if(answer[i] == b[i%b.length]) {score[1]++;}
            if(answer[i] == c[i%c.length]) {score[2]++;}
        }
        int maxScore = Math.max(score[0], Math.max(score[1], score[2]));
        ArrayList<Integer> list = new ArrayList<>();
        if(maxScore == score[0]) {list.add(1);}
        if(maxScore == score[1]) {list.add(2);}
        if(maxScore == score[2]) {list.add(3);}
        return list.stream().mapToInt(i->i.intValue()).toArray();
    }
}
Math.max를 이중으로 써서 score 3개를 비교했다. 그리고 ArrayList를 사용해서 마찬가지로 인덱스를 넣어줬는데 List를 Array로 바꾸는 것을 stream을 이용해서 한 줄로 처리해줬다.
📢 list.stream().mapToInt(i->i.intValue()).toArray(); 📢 
list라는 정수형 리스트를 생성하고, 이를 스트림으로 변환하여 mapToInt() 메서드를 이용해 각 요소를 int 형으로 매핑한 후 toArray() 메서드를 사용하여 int 배열로 변환하고 있습니다.
mapToInt(Integer::intValue)은 각 Integer 객체를 int 값으로 변환합니다.
toArray()는 스트림의 요소들을 배열로 반환합니다. 
Q. ✅ 그럼 Integer랑 int랑 다른거야?
네, Integer와 int는 자바에서 서로 다른 데이터 타입입니다.
int: 기본 데이터 타입(primitive type) 중 하나로, 정수 값을 저장하는 데 사용됩니다. int는 32비트의 부호 있는 정수를 표현할 수 있으며, 기본값은 0입니다. 예를 들어, int x = 10;과 같이 사용합니다.
Integer: int의 래퍼 클래스(wrapper class)로, 정수 값을 객체로 감싸고 여러 유틸리티 메서드를 제공합니다. Integer 클래스는 int 값을 포장하여 객체로 만들어 주는 역할을 합니다. 예를 들어, Integer x = 10;과 같이 사용합니다.
주요 차이점은 다음과 같습니다:
따라서, 프로그래밍에서는 주로 기본 데이터 타입 int를 사용하고, 필요에 따라 Integer 클래스를 사용하여 객체로 처리해야 하는 경우가 있습니다. 예를 들어, 컬렉션 프레임워크에서는 기본적으로 객체만 저장할 수 있기 때문에 Integer를 사용해야 할 때가 많습니다.