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

Heeeoh·2024년 3월 20일
0

프로그래머스

목록 보기
22/26
post-thumbnail

🧫 문제 분석

✔️ 출처

프로그래머스 PCCP 기출문제 10번 / 데이터 분석

📖 문제

핵심
val_ext 보다 ext가 더 작은 데이터를 뽑고, 거기서 sort_by에 해당하는 값을 기준으로 오름차순


🔅 문제 풀이

import java.util.*;

class Solution {
    public  int[][] solution(int[][] data, String ext, int val_ext, String sort_by) {
        int[][] answer;
        int filterIndex = indexTranslator(ext);
        List<int[]> filterList = new ArrayList<>();

        for (int[] datum : data) {
            if (datum[filterIndex] < val_ext)
                filterList.add(datum);
        }


        filterList.sort((o1, o2) -> {
            if (o1[indexTranslator(sort_by)] - o2[indexTranslator(sort_by)] < 0) return -1;
            else {
                return 1;
            }
        });

        answer = new int[filterList.size()][4];

        for (int i = 0; i < filterList.size(); i++) {
            answer[i] = filterList.get(i);
        }

        return  answer;
    }

    private  int indexTranslator(String value) {
        switch (value) {
            case  "code" : return 0;
            case "date" : return 1;
            case  "maximum" : return 2;
            default: return 3;
        }
    }
}

사실 스트림, 람다식 사용할려고 했는데 2차원 배열을 처리할 때 스트림 최종연산에서 아무리해도 안되서 포기하고 저렇게 한것이였다. 다른 사람들 풀이를 보니 스트림으로만 푸신분들이 있어서 보고 배워야겠다.

스트림, 람다식으로만 해서 다시 풀이

import java.util.*;

class Solution {
    public  int[][] solution(int[][] data, String ext, int val_ext, String sort_by) {
        int filterIndex = indexTranslator(ext);
        return Arrays.stream(data).filter(x -> x[filterIndex] < val_ext).sorted((o1, o2) -> o1[indexTranslator(sort_by)] - o2[indexTranslator(sort_by)]).toArray(int[][]::new);
    }
    private  int indexTranslator(String value) {
        switch (value) {
            case  "code" : return 0;
            case "date" : return 1;
            case  "maximum" : return 2;
            default: return 3;
        }
    }
}

근데 역시 스트림은 느린것 같다.

❗ 오답노트 / 필요한 지식

  1. ToArray(int[][]::new)를 배웠다.
  2. x-> x[] 처럼 x가 배열이지만 이렇게 사용할 수 있다. 파라미터이니까
profile
열심히 살자

0개의 댓글