Algorithm/CodingTest

[Programmers] PCCE 기출문제 10번 / 데이터 분석

누구세연 2024. 1. 7. 16:41

https://school.programmers.co.kr/learn/courses/30/lessons/250121https://school.programmers.co.kr/learn/courses/30/lessons/250121

 

프로그래머스

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

programmers.co.kr

 

 

데이터 분석이라는 문제 Java로 풀이하겠습니다.

문제는 물품 데이터를 처리하는 문제입니다.

주어진 이차원 정수 리스트 data에는 물품의 코드(code), 제조일(date), 최대 수량(maximum), 현재 수량(remain)이 포함되어 있습니다. 

그리고 세 가지 값이 주어집니다.

  • ext : 데이터를 필터링할 조건을 결정하는 문자열입니다.
  • val_ext: ext의 기준값으로 사용되는 정수입니다.
  • sort_by: 데이터를 정렬할 때 사용할 열을 결정하는 문자열입니다.

주어진 data에서 ext가 val_ext보다 작은 데이터를 뽑아내고, 그 후에 sort_by에 해당하는 열을 기준으로 오름차순으로 정렬합니다.

 

 

저는 아래와 같이 풀이해 보았습니다.

public static int[][] solution(int[][] data, String ext, int val_ext, String sort_by) {
    // 결과를 저장할 리스트 생성
    List<int[]> result = new ArrayList<>();

    // 주어진 데이터를 순회하면서 조건에 맞는 데이터를 필터링하여 결과 리스트에 추가
    for (int[] item : data) {
        int extValue;
        // ext 값에 따라 해당하는 열의 값을 가져오기
        switch (ext) {
            case "code":
                extValue = item[0];
                break;
            case "date":
                extValue = item[1];
                break;
            case "maximum":
                extValue = item[2];
                break;
            case "remain":
                extValue = item[3];
                break;
            default:
                throw new IllegalArgumentException("Invalid ext value");
        }

        // extValue가 val_ext보다 작은 경우에만 결과 리스트에 추가
        if (extValue < val_ext) {
            result.add(item);
        }
    }

    // sort_by 값에 따라 정렬 기준 설정
    Comparator<int[]> comparator;
    switch (sort_by) {
        case "code":
            comparator = Comparator.comparingInt(arr -> arr[0]);
            break;
        case "date":
            comparator = Comparator.comparingInt(arr -> arr[1]);
            break;
        case "maximum":
            comparator = Comparator.comparingInt(arr -> arr[2]);
            break;
        case "remain":
            comparator = Comparator.comparingInt(arr -> arr[3]);
            break;
        default:
            throw new IllegalArgumentException("Invalid sort_by value");
    }

    // 결과 리스트를 정렬
    result.sort(comparator);

    // 결과 리스트를 2차원 배열로 변환하여 반환
    return result.toArray(new int[0][]);
}
  1. result 조건에 맞는 데이터를 저장할 리스트를 초기화합니다.
  2. 주어진 데이터(data)를 반복하면서 ext값에 따라 해당하는 열의 값이 가져와서 extValue에 저장합니다.
  3. extValue가 val_ext보다 작은 경우에만 해당 데이터를 결과 리스트에 추가합니다.
  4. sort_by값에 따라 정렬 기준(comparator)을 설정합니다.
  5. 결과 리스트를 정렬합니다.
  6. 정렬된 결과 리스트를 2차원 배열로 변환하여 반환합니다.

 

저는 주어진 데이터를 조건에 따라 필터링하고 정렬하는 간단한 메서드로 구현해 보았습니다.

다른 이견이 있으시다면 자유롭게 댓글 남겨주세요.