본문 바로가기

Algorithm/Programmers

Level 1: PCCP 기출 문제 - 데이터 분석, Stream 필터와 정렬

문제 풀이: Stream 필터와 정렬

제공된 코드 data에서 ext 값이 val_ext보다 작은 데이터만 뽑은 후, sort_by에 해당하는 값을 기준으로 오름차순으로 정렬합니다.

java
닫기
class Solution { ​​​​public int[][] solution(int[][] data, String ext, int val_ext, String sort_by) { ​​​​​​​​int[][] answer = {}; ​​​​​​​​return answer; ​​​​} }

단순히 Array의 Element를 필터하고 정렬하는 문제입니다. Stream을 사용하여 문제를 해결합니다.

java
닫기
import java.util.Arrays; class Solution { public int[][] solution(int[][] data, String ext, int val_ext, String sort_by) { ‌‌return Arrays.stream(data).filter(e -> { ‌‌‌int val = (0 == ext.compareTo("code")) ? e[0] ‌‌‌‌: (0 == ext.compareTo("date")) ? e[1] ‌‌‌‌: (0 == ext.compareTo("maximum")) ? e[2] ‌‌‌‌: e[3]; ‌‌‌return val < val_ext; ‌‌}).sorted((lp, rp) -> { ‌‌‌// 오름차순으로 정렬 ‌‌‌return (0 == sort_by.compareTo("code")) ? (lp[0] < rp[0] ? -1 : 1) ‌‌‌‌: (0 == sort_by.compareTo("date")) ? (lp[1] < rp[1] ? -1 : 1) ‌‌‌‌: (0 == sort_by.compareTo("maximum")) ? (lp[2] < rp[2] ? -1 : 1) ‌‌‌‌: (lp[3] < rp[3] ? -1 : 1); ‌‌}).toArray(int[][]::new); } }
코드 비고
Line 5:10 Arrays.stream(data).filter(e -> {}) int[][] 배열을 Stream 객체로 구성하고 Element를 필터합니다.
Line 11:16 sorted((lp, rp) -> {}) int[][] 배열을 Stream 객체로 구성하고 Element를 정렬합니다.
Line 17 toArray(int[][]::new) Stream객체를 다시 int[][] 배열로 캐스팅합니다.

문제 풀이: 인덱스를 매핑하여 코드 정리

기존의 문제 풀이에서 인덱스를 매핑하고 코드를 정리합니다.

필터와 정렬에서 필요한 인덱스는 code date maximum remain 문자열에 따라서 0 1 2 3으로 매핑됩니다.

이를 리스트로 구성하고 입력된 문자열 extsort_by로 접근하는 인덱스를 구합니다.

java
닫기
import java.util.*; class Solution { public int[][] solution(int[][] data, String ext, int val_ext, String sort_by) { ‌‌List<String> map = Arrays.asList(new String[] { "code", "date", "maximum", "remain" }); ‌‌int ext_index = map.indexOf(ext); ‌‌int sort_by_index = map.indexOf(sort_by); ‌‌ ‌‌return Arrays.stream(data) ‌‌‌​​​​​.filter(e -> e[ext_index] < val_ext) ‌‌‌​​​​​.sorted((lp, rp) -> lp[sort_by_index] < rp[sort_by_index] ? -1 : 1) ‌‌‌​​​​​.toArray(int[][]::new); } }
코드 비고
Line 6:7 ext_index = map.indexOf(ext) 추출 또는 필터하는 데이터 이름과 데이터가 위치한 인덱스를 매핑하여 사용합니다.
sort_by_index = map.indexOf(sort_by)