본문 바로가기

개발지/코테

[프로그래머스] 코테연습 - PCCE 기출문제 10번 / 데이터 분석

- 내 방법 풀이

  • 스위치문을 최근에 많이 사용한다. 정렬기준은 총 2가지(String ext, String sort_by)가 나오므로, 정렬기준의 인덱스를 주어진 자료의 인덱스로 반환하는 메서드를 만들었고, 그것에 따라 먼저 ext가 val_ext보다 작은 것을 dataList에 추가한다.
  • 이후 다시 sB메서드를 사용해서 정렬기준 index를 구한 뒤 Comparator.sort를 통해 오름차순으로 정리해주었다.
import java.util.*;

class Solution {
    public int[][] solution(int[][] data, String ext, int val_ext, String sort_by) {
        List<int []> dataList = new ArrayList<>();
        for (int [] dt : data) {
            if (dt[sB(ext)] < val_ext) {
                dataList.add(dt);
            }
        }
        
        dataList.sort(Comparator.comparingInt(arr -> arr[sB(sort_by)]));
        return dataList.toArray(new int[0][]);
    }
    
    public int sB (String s) {
        switch (s) {
            case "code" : return 0;
            case "date" : return 1;
            case "maximum" : return 2;
            case "remain" : return 3;
        }
        return 0;
    }
}

 

- 다른 사람 방법 풀이

  • 스트림을 이용한 깔끔한 풀이. 스트림을 알맞게 사용하면 정말 코드의 간결성이 무섭게 향상되는 것 같다.
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;
    }
}