728x90
🔗 문제 링크
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
📌 문제 개요
데이터는 [code, date, maximum, remain] 형태의 2차원 배열로 주어진다.
주어진 조건(ext < val_ext)을 만족하는 데이터만 추출한 뒤,
sort_by에 해당하는 값을 기준으로 오름차순 정렬하여 반환하는 문제이다.
📌 접근 방법
문자열(code, date, maximum, remain)을 그대로 비교하기보다는 배열의 인덱스로 변환하여 처리했다.
먼저 getIndex() 메서드로 ext와 sort_by를 각각 인덱스로 변환한 뒤, 조건에 맞는 데이터만 ArrayList<int[]>에 저장했다.
이후 Comparator.comparingInt()를 이용하여 원하는 컬럼 기준으로 정렬하고,
마지막에 List<int[]>를 int[][]로 변환하여 반환했다.
📌 핵심 아이디어
1. 문자열을 배열 인덱스로 변환
문자열을 배열 인덱스로 변환하면 여러 곳에서 재사용할 수 있고 코드도 간결해진다.
private static int getIndex(String type) {
switch (type) {
case "code": return 0;
case "date": return 1;
case "maximum": return 2;
default: return 3;
}
}
2. 조건에 맞는 데이터만 저장
ext에 해당하는 값이 기준값보다 작은 데이터만 리스트에 저장한다.
for (int[] d : data) {
if (d[extIdx] < val_ext) {
list.add(d);
}
}
3. 원하는 컬럼 기준으로 정렬
Comparator.comparingInt()를 이용하면 원하는 컬럼을 기준으로 쉽게 오름차순 정렬할 수 있다.
list.sort(Comparator.comparingInt(d -> d[sortIdx]));
4. List를 2차원 배열로 변환
문제에서 요구하는 반환 타입인 int[][]로 변환하여 반환한다.
return list.toArray(new int[list.size()][]);
📌 전체 코드
import java.util.ArrayList;
import java.util.Comparator;
class Solution {
public int[][] solution(int[][] data, String ext, int val_ext, String sort_by) {
ArrayList<int[]> list = new ArrayList<>();
int extIdx = getIndex(ext);
int sortIdx = getIndex(sort_by);
for (int[] d : data) {
if (d[extIdx] < val_ext) {
list.add(d);
}
}
list.sort(Comparator.comparingInt(d -> d[sortIdx]));
return list.toArray(new int[list.size()][]);
}
private static int getIndex(String type) {
switch (type) {
case "code": return 0;
case "date": return 1;
case "maximum": return 2;
default: return 3;
}
}
}
📄 정리
- 문자열을 배열 인덱스로 변환하여 중복 코드를 줄였다.
- 조건에 맞는 데이터만 ArrayList에 저장한 뒤 정렬했다.
- Comparator.comparingInt()를 이용해 원하는 컬럼 기준으로 정렬했다.
- toArray()를 사용하여 List<int[]>를 int[][]로 변환했다.
- 구현 문제에서 문자열을 인덱스로 매핑하는 방법과 컬렉션을 배열로 변환하는 방법을 익힐 수 있었다.
728x90
'코테(Solved.ac + Programmers)' 카테고리의 다른 글
| 프로그래머스 문자열 안의 숫자 더하기 JAVA 풀이 (문자열, 구현, 아스키코드) (0) | 2026.07.05 |
|---|---|
| 프로그래머스 다트 게임 JAVA 풀이 (0) | 2026.07.04 |
| 프로그래머스 체육복 JAVA 풀이 (그리디, 구현) (0) | 2026.07.02 |
| 프로그래머스 완주하지 못한 선수 JAVA 풀이 (HashMap, 해시) (0) | 2026.07.01 |
| 프로그래머스 분수의 덧셈 JAVA 풀이 (수학, 구현, 유클리드 호제법) (0) | 2026.06.30 |