본문 바로가기
알고리즘

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

by 상후 2023. 11. 28.
728x90
반응형

 

 

https://github.com/ROUTINE-STUDY/Algorithm

알고리즘 스터디를 진행하고 있습니다. 😊
초보들로 구성되어있으며, 열심히 풀어보고 풀이 방식을 공유하고 피드백을 해주는 스터디입니다.
참여 문의는 댓글 혹은 GitHub 주소를 참고해주세요.

문제 출처 : https://school.programmers.co.kr/learn/courses/30/lessons/250121

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

내 코드(JAVA)

 

// 데이터 객체
class Data {
    int code;
    int date;
    int maximum;
    int remain;

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

    // 어떠한 값으로 정렬할 지 판단하기 위한 메서드
    public int getSortby(String sort_by) {
        switch (sort_by) {
            case "code":
                return this.code;
            case "date":
                return this.date;
            case "maximum":
                return this.maximum;
            default:
                return this.remain;
        }
    }
}

// 배열의 index 값과 의미를 저장한 enum
enum DataSet {
    CODE(0), DATE(1), MAXIMUM(2), REMAIN(3);

    private final int value;

    DataSet(int value) {
        this.value = value;
    }

    public int getValue() {
        return value;
    }
}

public class Solution {

    public int[][] solution(int[][] data, String ext, int val_ext, String sort_by) {
        int value = DataSet.valueOf(ext.toUpperCase()).getValue(); // enum을 통해 기준이 배열의 몇 번째인지 확인
        List<Data> list = new ArrayList<>();

        for (int[] d : data) {
            if (d[value] > val_ext) {
                continue;
            }
            Data obj = new Data(d[0], d[1], d[2], d[3]);
            list.add(obj);
        }

        list.sort((o1, o2) -> o1.getSortby(sort_by) - o2.getSortby(sort_by));

        int[][] answer = new int[list.size()][4];
        for (int i = 0; i < list.size(); i++) {
            Data obj = list.get(i);
            answer[i][0] = obj.code;
            answer[i][1] = obj.date;
            answer[i][2] = obj.maximum;
            answer[i][3] = obj.remain;
        }

        return answer;
    }

}

 

 

 

객체(Data)로 제어하면 조금 편할 것 같아 처음 떠오르는 방식으로 구현했습니다.

 

 

 

728x90
반응형

댓글