코딩 알고리즘 스터디
프로그래머스 [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;
}
}