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][]);
}
- result 조건에 맞는 데이터를 저장할 리스트를 초기화합니다.
- 주어진 데이터(data)를 반복하면서 ext값에 따라 해당하는 열의 값이 가져와서 extValue에 저장합니다.
- extValue가 val_ext보다 작은 경우에만 해당 데이터를 결과 리스트에 추가합니다.
- sort_by값에 따라 정렬 기준(comparator)을 설정합니다.
- 결과 리스트를 정렬합니다.
- 정렬된 결과 리스트를 2차원 배열로 변환하여 반환합니다.
저는 주어진 데이터를 조건에 따라 필터링하고 정렬하는 간단한 메서드로 구현해 보았습니다.
다른 이견이 있으시다면 자유롭게 댓글 남겨주세요.

'Algorithm > CodingTest' 카테고리의 다른 글
[Baekjoon] 1094번 막대기 (java) (2) | 2024.01.14 |
---|---|
[Programmers] 과일 장수(Java) (0) | 2024.01.12 |
[Programmers] PCCE 기출문제 9번 / 이웃한 칸 (1) | 2024.01.02 |
[Baekjoon] 1173번 운동 (Java) (2) | 2023.11.12 |
[Baekjoon] 1049번 기타줄 (Java) (0) | 2023.11.05 |