mondegreen

[240324] 알고리즘 리부트 37일차 - 프로그래머스 모의고사 자바 본문

알고리즘 풀이 및 리뷰/프로그래머스

[240324] 알고리즘 리부트 37일차 - 프로그래머스 모의고사 자바

앙갱 2024. 3. 24. 21:09
반응형

처음에 큐를 써가면서 앞에서 뽑고 뒤로 넣어야 하나라는 고민을 했다. 하지만 시간이 더 걸릴 것 같아서 배열을 활용한 방법을 고민했고 모드 연산을 통해 반복문을 돌지 않고도 각 수포자의 답안을 비교할 수 있겠다는 것을 깨달았다. 그 뒤의 구현은 복잡하지 않았다. 다만 list를 어떻게 array로 변환할까 고민했고 두 가지 방식을 사용했다. 리스트에서 배열로 복사하는 방법과 스트림으로 변환해서 배열로 만드는 법. 시간은 전자가 훨씬 빠른 것 같다.

import java.util.*;

class Solution {
    public int[] solution(int[] answers) {
        int [] st1 = {1,2,3,4,5};
        int [] st2 = {2,1,2,3,2,4,2,5};        
        int [] st3 = {3,3,1,1,2,2,4,4,5,5};
        
        int cor1 = 0;
        int cor2 = 0;
        int cor3 = 0;
        
        
        for(int i =0; i<answers.length; i++){
            
            if(answers[i] == st1[i % 5]) cor1++;
            if(answers[i] == st2[i % 8]) cor2++;
            if(answers[i] == st3[i % 10]) cor3++;
            
        }
        
        int highest = Math.max(cor1, Math.max(cor2, cor3));
        
        List<Integer> list = new ArrayList<>();
        
        
        if(cor1 == highest) list.add(1);
        if(cor2 == highest) list.add(2);
        if(cor3 == highest) list.add(3);      
               
        int [] answer = new int [list.size()];
        
        for(int i =0; i<list.size(); i++) answer[i] = list.get(i);
        
        return answer;
        
        //return list.stream().mapToInt(Integer::intValue).toArray();
    }
}
반응형