Coding Test/JAVA 코딩테스트 풀이정리(프로그래머스)

프로그래머스 스쿨 Lv.1 - [PCCE 기출문제] 10번 / 데이터 분석
깝몬 2024. 1. 9. 02:19

문제

https://school.programmers.co.kr/learn/courses/30/lessons/250121

 

정답

 

import java.util.*;

class Solution {
    public int[][] solution(int[][] data, String ext, int val_ext, String sort_by) {
        //비교와 정렬기준에 따른 index를 미리 case문으로 구해둔다.
        int typeNum = -1;
        int sortNum = -1;
        switch(ext){
                case "code":
                    typeNum=0;
                    break;
                case "date":
                    typeNum=1;
                    break;
                case "maximum":
                    typeNum=2;
                    break;
                case "remain":
                    typeNum=3;
                    break;
            }
        switch(sort_by){
                case "code":
                    sortNum=0;
                    break;
                case "date":
                    sortNum=1;
                    break;
                case "maximum":
                    sortNum=2;
                    break;
                case "remain":
                    sortNum=3;
                    break;
            }
        
        // 해당하는 정보만 뽑아서 큐에 담은 후 다시 배열로
        Queue<int[]> tempQue = new LinkedList<>();
        for(int[] dataGet : data){
            if(dataGet[typeNum]<val_ext){
                tempQue.add(dataGet);    
            }
        }
        int size = tempQue.size();
        int[][] answer = new int[size][4];
        for(int i=0;i<size;i++){
            answer[i]=tempQue.poll();
        }
        
        //람다식 이용하여 정리, 람다식에 사용 될 것이므로 effectively final인 변수 하나 새로 잡아서 사용
        int use = sortNum;
        Arrays.sort(answer, Comparator.comparingInt(arr -> arr[use]));
        
        return answer;
    }
}

 

정보를 가져와서 배열에 담은것 까지는 쉬웠으나, 람다식을 이용한 배열 순서 변경은 인터넷 검색을 통해 방식을 찾아냈다.

 

다른 사람의 풀이를 보니 stream과 람다식의 동시 사용으로 풀이를 아주 간결하게 만들어냈던데,

 

stream과 람다식을 공부하여 다시 재도전 해볼만 한 문제로 보인다.