보라코딩

프로그래머스 자바 :: PCCE 기출문제 10번 데이터 분석 본문

프로그래머스 (java)

프로그래머스 자바 :: PCCE 기출문제 10번 데이터 분석

new 보라 2024. 5. 20. 20:51

1단계고 비교적 해볼만 하다고 느꼈으나

정렬을 어떻게 해야할지 몰랐고

배웠다..!

 

 

 

 

 

import java.util.*;

class Solution {
      
    public int[][] solution(int[][] data, String ext, int val_ext, String sort_by) {
        
        String[] dataArr = {"code", "date", "maximum", "remain"};
        
        int ext_Num = 0;
        int sort_by_Num = 0;
        
        for (int i = 0; i < dataArr.length; i++) {
            if (dataArr[i].equals(ext)) {
                ext_Num = i;
            }
            if (dataArr[i].equals(sort_by)) {
                sort_by_Num = i;
            }
        }

                       
        List<int[]> list = new ArrayList<>();
         for (int[] row : data) {
            if (row[ext_Num] < val_ext) {
                list.add(row);
            }
        }
        
        final int finalSortByNum = sort_by_Num;       
        list.sort(Comparator.comparingInt(row -> row[finalSortByNum]));
        
        int[][] answer = new int[list.size()][data[0].length];
        for (int i = 0; i < list.size(); i++) {
            answer[i] = list.get(i);
        }
    
        return answer;
    }
}

 

 

list 오름차순

 

list.sort(Comparator.comparingInt(row -> row[finalSortByNum]));

 

 

 

list 내림차순

 

list.sort(Comparator.comparingInt(row -> row[finalSortByNum]).reversed());

 

 

 

다른 사람 코드!!

 

 

이건 너무 갈길이 멀고..

import java.util.*;

class Solution {
    public int[][] solution(int[][] data, String ext, int val_ext, String sort_by) {

        String[] arr = {"code","date","maximum","remain"};
        List<String> columnList = Arrays.asList(arr);
        int extIdx = columnList.indexOf(ext);
        int sortIdx = columnList.indexOf(sort_by);
        int[][] answer = Arrays.stream(data).filter(o1 -> o1[extIdx] < val_ext)
            .sorted((o1 ,o2) -> o1[sortIdx]-o2[sortIdx]).toArray(int[][]::new);

        return answer;
    }
}

 

 

 

이건 쉬우면서 좀 더 깔끔한 코드

import java.util.*;

class Solution {
    public List<int[]> solution(int[][] data, String ext, int val_ext, String sort_by) {

        List<int[]> list = new ArrayList<>();
        String[] s = {"code","date","maximum","remain"};
        int extIdx=0, sortIdx=0;

        for(int i=0; i<4; i++){
            if(ext.equals(s[i])) extIdx=i;
            if(sort_by.equals(s[i])) sortIdx=i;
        }
        final int si=sortIdx;

        for(int i=0; i<data.length; i++){
            if(data[i][extIdx]<val_ext) list.add(data[i]);
        }

        // *lambda, Comparator 사용시 final 이나 effectively final여야한다!
        Collections.sort(list,(o1,o2)->o1[si]-o2[si]);


        return list;
    }
}