코딩 알고리즘 스터디

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

Rabet 2025. 2. 16. 18:38

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

1. 문제 설명

- 결과

data에서 ext값이 val_ext보다 작은 데이터만 뽑은 후,

sort_by에 해당하는 값을 기준으로 오름차순으로 정렬하여 return

 

- 변수 설명

  • 데이터는 ["코드 번호(code)", "제조일(date)", "최대 수량(maximum)", "현재 수량(remain)"]으로 구성
  • 제조일이 20300501 이전인 물건들을 현재 수량이 적은 순서
data = [[1, 20300104, 100, 80], [2, 20300804, 847, 37], [3, 20300401, 10, 8]]
  • 결과
data = [[3,20300401,10,8],[1,20300104,100,80]]

 

2. 문제 풀이 

ext와 val_ext를 통해 뽑아낼 데이터를 고른 후, Comparator로 오름차순으로 정렬한다.

sort와 lamda 표현식을 통해 Comparator을 구현해보았다. comparator는 객체를 기준에 맞게 정렬하거나, 다른 기준으로 비교할 때 유용하다.  

  • int compare(T o1, T o2)

 

  • 0: 두 객체가 같으면 0을 반환.
  • 음수: o1이 o2보다 작은 경우 음수를 반환.
  • 양수: o1이 o2보다 큰 경우 양수를 반환.

 

import java.util.ArrayList;
import java.util.List;

class Solution {
    public List<int[]> solution(int[][] data, String ext, int val_ext, String sort_by) {
        List<int[]> answer = new ArrayList<>();
        // 뽑아낼 데이터
        for (int[] d : data) {
            if (ext.equals("code")) {
                if (d[0] < val_ext) answer.add(d);
            } else if (ext.equals("date")) {
                if (d[1] < val_ext) answer.add(d);
            } else if (ext.equals("maximum")) {
                if (d[2] < val_ext) answer.add(d);
            } else {
                if (d[3] < val_ext) answer.add(d);
            }
        }
        // 오름차순 정렬
        answer.sort((d1, d2) -> { // Comparator
            if (sort_by.equals("code")) {
                return d1[0] - d2[0]; // 양수 - d1이 d2보다 크면 d2 먼저 배치
            } else if (sort_by.equals("date")) {
                return d1[1] - d2[1];
            } else if (sort_by.equals("maximum")) {
                return d1[2] - d2[2];
            } else {
                return d1[3] - d2[3];
            }
        });
        return answer;
    }
}