새소식

반응형
250x250
Programmers/Lv.1

프로그래머스 - 데이터 분석

  • -
728x90
반응형

 

Product 객체를 만들어 이 문제를 해결해봤다.

 

먼저 Product class

class Product {
    int code;
    int date;
    int maximum;
    int remain;

    public Product(int code, int date, int maximum, int remain) {
        this.code = code;
        this.date = date;
        this.maximum = maximum;
        this.remain = remain;
    }

    // Getter 메서드들...
}

 

Product 객체를 생성한 후에 조건에 맞는 product만을 선별을 해야한다.

그리고 sort_by에 맞는 정렬 기준을 생성해준다.

for(int i = 0; i < data.length; i++) {
            Product product = new Product(data[i][0],data[i][1],data[i][2],data[i][3]);
            productCheck(product, ext, val_ext, sort_by);
}

public void productCheck(Product product, String ext, int val_ext, String sort_by) {
        
        switch(ext) {
            case "code" :
                if(product.code < val_ext) {
                    products.add(product);
                }
                break;
            case "date" :
                if(product.date < val_ext) {
                    products.add(product);
                }
                break;
            case "maximum" :
                if(product.maximum < val_ext) {
                    products.add(product);
                }
                break;
            case "remain" :
                if(product.remain < val_ext) {
                    products.add(product);
                }
                break;
        }
        
        switch(sort_by) {
            case "code" : comparator = Comparator.comparingInt(Product::getCode); break;
            case "date" : comparator = Comparator.comparingInt(Product::getDate); break;
            case "maximum" : comparator = Comparator.comparingInt(Product::getMaximum); break;
            case "remain" : comparator = Comparator.comparingInt(Product::getRemain); break;
        }
    }

 

그 후 Collections.sort(products, comparator)로 정렬을 해준 뒤 answer 배열에 데이터를 넣어준 뒤 반환하면 된다.

 

전체 코드

import java.util.*;

class Solution {
    static List<Product> products;
    static Comparator<Product> comparator;
    public int[][] solution(int[][] data, String ext, int val_ext, String sort_by) {
        int[][] answer = {};
        products = new ArrayList<>();
        for(int i = 0; i < data.length; i++) {
            Product product = new Product(data[i][0],data[i][1],data[i][2],data[i][3]);
            productCheck(product, ext, val_ext, sort_by);
        }
        Collections.sort(products, comparator);
        answer = new int[products.size()][4];
        for(int i = 0; i < products.size(); i++) {
            answer[i][0] = products.get(i).getCode();
            answer[i][1] = products.get(i).getDate();
            answer[i][2] = products.get(i).getMaximum();
            answer[i][3] = products.get(i).getRemain();
        }
        
        return answer;
    }
    
    public void productCheck(Product product, String ext, int val_ext, String sort_by) {
        
        switch(ext) {
            case "code" :
                if(product.code < val_ext) {
                    products.add(product);
                }
                break;
            case "date" :
                if(product.date < val_ext) {
                    products.add(product);
                }
                break;
            case "maximum" :
                if(product.maximum < val_ext) {
                    products.add(product);
                }
                break;
            case "remain" :
                if(product.remain < val_ext) {
                    products.add(product);
                }
                break;
        }
        
        switch(sort_by) {
            case "code" : comparator = Comparator.comparingInt(Product::getCode); break;
            case "date" : comparator = Comparator.comparingInt(Product::getDate); break;
            case "maximum" : comparator = Comparator.comparingInt(Product::getMaximum); break;
            case "remain" : comparator = Comparator.comparingInt(Product::getRemain); break;
        }
    }
    
    class Product {
        int code;
        int date;
        int maximum;
        int remain;
        
        public Product(int code, int date, int maximum, int remain) {
            this.code = code;
            this.date = date;
            this.maximum = maximum;
            this.remain = remain;
        }
        
        public int getCode() {
            return code;
        }

        public int getDate() {
            return date;
        }

        public int getMaximum() {
            return maximum;
        }

        public int getRemain() {
            return remain;
        }
    }
}

 

객체를 만들어서 풀어보려고 했다. 하지만 정렬 기준 세우는 로직과 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;
    }
}

한상백 , zoozoo , wjdehddbs1003@gmail.com 님의 풀이

 

세상에는 참 똑똑한 사람이 많은 것 같다..ㅎ

728x90
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.