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;
}
}'코딩 알고리즘 스터디' 카테고리의 다른 글
| 프로그래머스 [2025 프로그래머스 코드챌린지 2차 예선] / 택배상자 꺼내기 - java (1) | 2025.02.24 |
|---|---|
| 프로그래머스 [PCCP 기출문제] 1번 / 동영상 재생기 (0) | 2025.02.16 |
| 프로그래머스 Lv.1 대충 만든 자판도움말 - Java (1) | 2025.01.12 |
| 프로그래머스 Lv.1 [2024 KAKAO WINTER INTERNSHIP] 가장 많이 받은 선물 - JAVA (0) | 2025.01.05 |
| 프로그래머스 Lv.1 신고 결과 받기 (1) | 2024.12.25 |