- 내 방법 풀이
- 스위치문을 최근에 많이 사용한다. 정렬기준은 총 2가지(String ext, String sort_by)가 나오므로, 정렬기준의 인덱스를 주어진 자료의 인덱스로 반환하는 메서드를 만들었고, 그것에 따라 먼저 ext가 val_ext보다 작은 것을 dataList에 추가한다.
- 이후 다시 sB메서드를 사용해서 정렬기준 index를 구한 뒤 Comparator.sort를 통해 오름차순으로 정리해주었다.
import java.util.*;
class Solution {
public int[][] solution(int[][] data, String ext, int val_ext, String sort_by) {
List<int []> dataList = new ArrayList<>();
for (int [] dt : data) {
if (dt[sB(ext)] < val_ext) {
dataList.add(dt);
}
}
dataList.sort(Comparator.comparingInt(arr -> arr[sB(sort_by)]));
return dataList.toArray(new int[0][]);
}
public int sB (String s) {
switch (s) {
case "code" : return 0;
case "date" : return 1;
case "maximum" : return 2;
case "remain" : return 3;
}
return 0;
}
}
- 다른 사람 방법 풀이
- 스트림을 이용한 깔끔한 풀이. 스트림을 알맞게 사용하면 정말 코드의 간결성이 무섭게 향상되는 것 같다.
import java.util.*;
class Solution {
public int[][] solution(int[][] data, String ext, int val_ext, String sort_by) {
String[] arr = {"code","date","maximum","remain"};
List<String> columnList = Arrays.asList(arr);
int extIdx = columnList.indexOf(ext);
int sortIdx = columnList.indexOf(sort_by);
int[][] answer = Arrays.stream(data).filter(o1 -> o1[extIdx] < val_ext)
.sorted((o1 ,o2) -> o1[sortIdx]-o2[sortIdx]).toArray(int[][]::new);
return answer;
}
}