
🧫 문제 분석
✔️ 출처
📖 문제

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

근데 역시 스트림은 느린것 같다.
❗ 오답노트 / 필요한 지식
- ToArray(int[][]::new)를 배웠다.
- x-> x[] 처럼 x가 배열이지만 이렇게 사용할 수 있다. 파라미터이니까
'programmers > Lv 1' 카테고리의 다른 글
PCCP 기출문제 1번 붕대감기 (0) | 2024.06.27 |
---|---|
공원 산책 (0) | 2024.06.27 |
추억 점수 (0) | 2024.06.27 |
프로그래머스Lv. 1 로또의 최고 순위와 최저 순위 (0) | 2024.06.27 |
프로그래머스Lv 1 옹알이 (2) (0) | 2024.06.27 |