


나의 풀이
import java.util.*;
class Solution {
public int[][] solution(int[][] data, String ext, int val_ext, String sort_by) {
ArrayList<int[]> list = new ArrayList<>();
for (int i = 0; i < data.length; i++) { // 1
int[] row = data[i];
switch (ext) {
case "code":
if (row[0] < val_ext) list.add(row);
break;
case "date":
if (row[1] < val_ext) list.add(row);
break;
case "maximum":
if (row[2] < val_ext) list.add(row);
break;
default:
if (row[3] < val_ext) list.add(row);
break;
}
}
Collections.sort(list, new Comparator<int[]>() { // 2
@Override
public int compare(int[] o1, int[] o2) {
int index = 0;
if ("code".equals(sort_by)) {
index = 0;
} else if ("date".equals(sort_by)) {
index = 1;
} else if ("maximum".equals(sort_by)) {
index = 2;
} else {
index = 3;
}
return Integer.compare(o1[index], o2[index]);
}
});
int[][] answer = new int[list.size()][]; // 3
for (int i = 0; i < list.size(); i++) {
answer[i] = list.get(i);
}
return answer;
}
}
과정
- data에서 조건에 맞는 행을 list에 추가
- list를 주어진 조건에 맞춰 정렬
- list를 answer에 추가
다른 사람 풀이
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;
}
}