AI 엔지니어인 현식이는 데이터를 분석하는 작업을 진행하고 있습니다. 데이터는 ["코드 번호(code)", "제조일(date)", "최대 수량(maximum)", "현재 수량(remain)"]으로 구성되어 있으며 현식이는 이 데이터들 중 조건을 만족하는 데이터만 뽑아서 정렬하려 합니다.
예를 들어 다음과 같이 데이터가 주어진다면
data = [[1, 20300104, 100, 80], [2, 20300804, 847, 37], [3, 20300401, 10, 8]]
이 데이터는 다음 표처럼 나타낼 수 있습니다.
code | date | maximum | remain |
---|---|---|---|
1 | 20300104 | 100 | 80 |
2 | 20300804 | 847 | 37 |
3 | 20300401 | 10 | 8 |
주어진 데이터 중 "제조일이 20300501 이전인 물건들을 현재 수량이 적은 순서"로 정렬해야 한다면 조건에 맞게 가공된 데이터는 다음과 같습니다.
data = [[3,20300401,10,8],[1,20300104,100,80]]
정렬한 데이터들이 담긴 이차원 정수 리스트 data와 어떤 정보를 기준으로 데이터를 뽑아낼지를 의미하는 문자열 ext, 뽑아낼 정보의 기준값을 나타내는 정수 val_ext, 정보를 정렬할 기준이 되는 문자열 sort_by가 주어집니다.
data에서 ext 값이 val_ext보다 작은 데이터만 뽑은 후, sort_by에 해당하는 값을 기준으로 오름차순으로 정렬하여 return 하도록 solution 함수를 완성해 주세요. 단, 조건을 만족하는 데이터는 항상 한 개 이상 존재합니다.
제한사항
입출력 예
data | ext | val_ext | sort_by | result |
---|---|---|---|---|
[[1, 20300104, 100, 80], [2, 20300804, 847, 37], [3, 20300401, 10, 8]] | "date" | 20300501 | "remain" | [[3,20300401,10,8],[1,20300104,100,80]] |
https://school.programmers.co.kr/learn/courses/30/lessons/250121
import java.util.*;
class Solution {
public int[][] solution(int[][] data, String ext, int val_ext, String sort_by) {
Map<String, Integer> colOrder = new HashMap<>();
colOrder.put("code", 0);
colOrder.put("date", 1);
colOrder.put("maximum", 2);
colOrder.put("remain", 3);
int[][] filteredData = Arrays.stream(data).filter(x -> x[colOrder.get(ext)] < val_ext).toArray(int[][]::new);
Arrays.sort(filteredData, (o1, o2) -> o1[colOrder.get(sort_by)] - o2[colOrder.get(sort_by)]);
return filteredData;
}
}
import java.util.*;
class Solution {
public List<int[]> solution(int[][] data, String ext, int val_ext, String sort_by) {
List<int[]> list = new ArrayList<>();
String[] s = {"code","date","maximum","remain"};
int extIdx=0, sortIdx=0;
for(int i=0; i<4; i++){
if(ext.equals(s[i])) extIdx=i;
if(sort_by.equals(s[i])) sortIdx=i;
}
final int si=sortIdx;
for(int i=0; i<data.length; i++){
if(data[i][extIdx]<val_ext) list.add(data[i]);
}
// *lambda, Comparator 사용시 final 이나 effectively final여야한다!
Collections.sort(list,(o1,o2)->o1[si]-o2[si]);
return list;
}
}
올려주신 코드 참고한 덕분에 스트림 연산이 간결해 졌네요. 감사합니다.