핵심
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;
}
}
}
근데 역시 스트림은 느린것 같다.