본문 바로가기

카테고리 없음

프로그래머스-Level1-[PCCE 기출문제] 10번 / 데이터 분석

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하는 과정이 존재하여서 시간적으로 상당히 오래 걸린다.다음번에는 런타임을 줄이는 방식으로 해보려고 한다.