문제 풀이: Stream 필터와 정렬
제공된 코드 data에서 ext 값이 val_ext보다 작은 데이터만 뽑은 후, sort_by에 해당하는 값을 기준으로 오름차순으로 정렬합니다.
class Solution {
public int[][] solution(int[][] data, String ext, int val_ext, String sort_by) {
int[][] answer = {};
return answer;
}
}
단순히 Array의 Element를 필터하고 정렬하는 문제입니다. Stream을 사용하여 문제를 해결합니다.
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);
}
}
코드 | 비고 | |
Stream객체를 다시 |
문제 풀이: 인덱스를 매핑하여 코드 정리
기존의 문제 풀이에서 인덱스를 매핑하고 코드를 정리합니다.
필터와 정렬에서 필요한 인덱스는 code date maximum remain 문자열에 따라서 0 1 2 3으로 매핑됩니다.
이를 리스트로 구성하고 입력된 문자열 ext와 sort_by로 접근하는 인덱스를 구합니다.
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);
}
}
코드 | 비고 | |
추출 또는 필터하는 |
||
'Algorithm > Programmers' 카테고리의 다른 글
Level 2: 광물 캐기, 그리디 알고리즘 (0) | 2023.12.05 |
---|---|
Level 2: PCCP 기출문제 - 석유 시추, BFS 알고리즘 (0) | 2023.12.04 |
Level 1: PCCP 기출문제 - 이웃한 칸, 이중 배열의 랜덤 엑세스 (0) | 2023.12.04 |
Level 1: PCCP 기출문제 - 붕대 감기, 시간 경과에 따른 로직 계산 (0) | 2023.12.04 |
Level 1: 둘만의 암호, 임의의 ASCII 코드 연산을 모킹하여 풀이 (0) | 2023.11.30 |