99클럽 코테 스터디 20일차 TIL : 완전탐색(프로그래머스 - 모의고사)

2024. 11. 16. 16:54Algorithm/항해99(4기)


🔎 문제 

수포자 3명
수학문제 찍는 방식

1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, /1, 2, 3, 4, 5, ...
2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, /2, 1, 2, 3,/ 2, 4, 2, 5, ...
3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5 /, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ...

누가 제일 많이 맞추는 지 반환 (같은 점수면 오름차순 정렬)

시험은 10000문제 최대

 

 

💡 풀이

- cnt: 각 사람들이 현재 찍은 값의 index 저장, 마지막까지 돌면 다시 처음부터 반복하기 위해 만듬

- score: 각 사람들이 이긴 횟수를 저장

- sa[i] : 각 사람들의 찍는 값(반복할 값을 배열에 저장)

import java.util.*;

class Solution {
    public int[] solution(int[] answers) {    
        int cnt1 = 0;
        int cnt2 = 0;
        int cnt3 = 0;
        int[] score = new int[3];
        int[] sa1 = {1,2,3,4,5};
        int[] sa2 = {2,1,2,3,2,4,2,5};
        int[] sa3 = {3,3,1,1,2,2,4,4,5,5};
        
        for(int ans : answers){
            if(ans==sa1[cnt1++]) score[0]++;
            if(ans==sa2[cnt2++]) score[1]++;
            if(ans==sa3[cnt3++]) score[2]++;
            
            if(cnt1>=sa1.length) cnt1=0;
            if(cnt2>=sa2.length) cnt2=0;
            if(cnt3>=sa3.length) cnt3=0;
        }
        
         // 최고 점수를 받은 사람 찾기
        List<Integer> list = new ArrayList<>();
        int maxScore = Math.max(score[0], Math.max(score[1], score[2]));
        for (int i = 0; i < score.length; i++) {
            if (score[i] == maxScore) {
                list.add(i + 1);
            }
        }

        // List<Integer>를 int[]로 변환
        return list.stream().mapToInt(i -> i).toArray();
    }
}

 

 

📌 오늘의 회고

list에서 배열로 변환하는 과정에서 list.toArray()를 처음에 사용했는데 오류가 발생했다.

알고보니 list는 Integer 값으로 제너릭 타입이고, 내가 반환해야하는 값은 int타입 배열이라 함수를 적용할 수는 없고

스트림을 이용하여 변환해줘야했다.