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

윤준혁·2024년 3월 17일

나의 풀이

import java.util.*;

class Solution {
    public int[][] solution(int[][] data, String ext, int val_ext, String sort_by) {
        ArrayList<int[]> list = new ArrayList<>();
        
        for (int i = 0; i < data.length; i++) { // 1
            int[] row = data[i];
            switch (ext) {
                case "code":
                    if (row[0] < val_ext) list.add(row);
                    break;
                case "date":
                    if (row[1] < val_ext) list.add(row);
                    break;
                case "maximum":
                    if (row[2] < val_ext) list.add(row);
                    break;
                default:
                    if (row[3] < val_ext) list.add(row);
                    break;
            }
        }
        
        Collections.sort(list, new Comparator<int[]>() { // 2
            @Override
            public int compare(int[] o1, int[] o2) {
                int index = 0;
                if ("code".equals(sort_by)) {
                    index = 0;
                } else if ("date".equals(sort_by)) {
                    index = 1;
                } else if ("maximum".equals(sort_by)) {
                    index = 2;
                } else {
                    index = 3;
                }
                return Integer.compare(o1[index], o2[index]);
            }
        });
        
        int[][] answer = new int[list.size()][]; // 3
        for (int i = 0; i < list.size(); i++) {
            answer[i] = list.get(i);
        }
        
        return answer;
    }
}

과정

  1. data에서 조건에 맞는 행을 list에 추가
  2. list를 주어진 조건에 맞춰 정렬
  3. list를 answer에 추가

다른 사람 풀이

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;
    }
}

0개의 댓글