import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
class Solution {
public int[][] solution(int[][] data, String ext, int val_ext, String sort_by) {
int firstLength=data.length;//data배열의 개수 반환값 저장
int date=val_ext;//Stirng값 int로 파싱
ArrayList<int[]> dataStock = new ArrayList<int[]>();
if(ext.equals("code")){
for (int i = 0; i < firstLength; i++) {
if (data[i][0] <= date) {
dataStock.add(data[i]);
}
}
}
if(ext.equals("date")){
for (int i = 0; i < firstLength; i++) {
if (data[i][1] <= date) {
dataStock.add(data[i]);
}
}
}
if(ext.equals("maximum")){
for (int i = 0; i < firstLength; i++) {
if (data[i][2] <= date) {
dataStock.add(data[i]);
}
}
}
if(ext.equals("remain")){
for (int i = 0; i < firstLength; i++) {
if (data[i][3] <= date) {
dataStock.add(data[i]);
}
}
}
int[][] answer = dataStock.toArray(new int[0][]);
if(sort_by.equals("code")){
Comparator<int[]> comparator = Comparator.comparingInt(arr -> arr[0]);
Arrays.sort(answer, comparator);
}
else if(sort_by.equals("date")){
Comparator<int[]> comparator = Comparator.comparingInt(arr -> arr[1]);
Arrays.sort(answer, comparator);
}
else if(sort_by.equals("maximum")){
Comparator<int[]> comparator = Comparator.comparingInt(arr -> arr[2]);
Arrays.sort(answer, comparator);
}
else if(sort_by.equals("remain")){
Comparator<int[]> comparator = Comparator.comparingInt(arr -> arr[3]);
Arrays.sort(answer, comparator);
}
return answer;
}
}
우선 이 문제를 봤을떄 떠올린건 2가지였다. 첫번쨰는 각 데이터를 데이터클래스 객체로 분류해서 만들어준 후 그 데이터 객체 배열로 나열할 것인지,혹은 comparator처럼 import 한 정렬 객체를 사용할 것인지이다.
이번엔 comparator를 이용하여서 접근하였는데 각 배열의 sort_by값에 따라서 정렬기준을 바꿔서 Arrays.sort로 한번 더 sorting을 해주어야한다.
또한 [a,b,c,d]형식의 데이터를 아예 어레이리스트를 선언,이 어레이리스트에 add하는 식으로 데이터 객체를 생성(이떄는 각각의 요소마다 set해주어야되는 번거로움이 있다.)하지않고 저장해주었다.
물론 이런 형태의 풀이는 좋은 풀이라고 볼 순 없는데 comparator부분이 너무 많고 각각의 요소마다 sort하는 과정이 존재하여서 시간적으로 상당히 오래 걸린다.다음번에는 런타임을 줄이는 방식으로 해보려고 한다.