코딩 테스트

프로그래머스) [PCCE 기출문제] 10번 / 데이터 분석 Lv1

우루쾅 2024. 2. 11. 13:54
728x90
반응형
SMALL

Lv1 이지만 아닌 것 같은 문제....

 

코드번호, 제조일, 최대수량, 현재 수량으로 구성되어있는 데이터 중 필요한 데이터를 뽑아서 정렬하는 문제입니다.

 

각각 데이터를 순서에 맞게끔 데이터를 뽑고, 조건에 맞을 경우 아래 int 배열 리스트에 데이터를 쌓았다.

List<int[]> list = new ArrayList<>();

 

그 뒤에 list 배열을 2차원 배열로 풀어서 answer에 값을 넣은 뒤 실행했는데 테스트 코드 성공!!

 

그런데 소스코드가 너무 더럽다

람다식을 코테문제를 풀 때 처음 적용시켜봤는데 final 를 사용해야된다고 해서 변수를 또 바꿔주고

순차적으로 단계를 나눠서 처리를 해나가는데 리스트 int 배열을 선언해서 사용하는것도 맘에 안든다....

 

끼워맞추기로 정답은 맞췄지만 조금 찝찝한 상황

 

다른사람의 정답을 봤는데 역시나 훨신 좋고 훌륭한 방법들이 많았다 ㅎㅎ;;

 

arr 배열에 위 데이터들을 넣어주고 해당 배열을 기준으로 잡은 뒤 Arrays.stream 으로 답을 뽑아내는 방법

어마무시하다....

 

내 문제를 풀어서 공부했다기보다 다른 사람들의 답을 통해 공부가 된 문제였다

 

 

 

 

 


정답

import java.util.*;

class Solution {
    public int[][] solution(int[][] data, String ext, int val_ext, String sort_by) {
        List<int[]> list = new ArrayList<>();
        Map<String, Integer> arr = new HashMap<>();
        int chNo = 0;
        if(sort_by.equals("code")) chNo = 0;
        else if(sort_by.equals("date")) chNo = 1;
        else if(sort_by.equals("maximum")) chNo = 2;
        else if(sort_by.equals("remain")) chNo = 3;
        final int sol = chNo;
        
        for(int i=0; i<data.length; i++){
            arr.put("code", data[i][0]);
            arr.put("date", data[i][1]);
            arr.put("maximum", data[i][2]);
            arr.put("remain", data[i][3]);
            
            if(arr.containsKey(ext)){
                if(arr.get(ext) < val_ext) {
                    int [] get = new int [4];
                    get[0] = data[i][0];
                    get[1] = data[i][1];
                    get[2] = data[i][2];
                    get[3] = data[i][3];
                    
                    list.add(get);
                }
            }
        }
        
        int answer[][] = new int[list.size()][4];
        for(int i=0; i<list.size(); i++){
            answer[i][0] = list.get(i)[0];
            answer[i][1] = list.get(i)[1];
            answer[i][2] = list.get(i)[2];
            answer[i][3] = list.get(i)[3];
        }
        
        Arrays.sort(answer, (o1, o2) -> {
            return(o1[sol] - o2[sol]);
        });
        
        return answer;
    }
}

 

 

출처

프로그래머스 - https://school.programmers.co.kr/learn/courses/30/lessons/250121

728x90
반응형
LIST