728x90
반응형
SMALL
Lv1 이지만 아닌 것 같은 문제....
코드번호, 제조일, 최대수량, 현재 수량으로 구성되어있는 데이터 중 필요한 데이터를 뽑아서 정렬하는 문제입니다.
각각 데이터를 순서에 맞게끔 데이터를 뽑고, 조건에 맞을 경우 아래 int 배열 리스트에 데이터를 쌓았다.
List<int[]> list = new ArrayList<>();
그 뒤에 list 배열을 2차원 배열로 풀어서 answer에 값을 넣은 뒤 실행했는데 테스트 코드 성공!!
그런데 소스코드가 너무 더럽다
람다식을 코테문제를 풀 때 처음 적용시켜봤는데 final 를 사용해야된다고 해서 변수를 또 바꿔주고
순차적으로 단계를 나눠서 처리를 해나가는데 리스트 int 배열을 선언해서 사용하는것도 맘에 안든다....
끼워맞추기로 정답은 맞췄지만 조금 찝찝한 상황
다른사람의 정답을 봤는데 역시나 훨신 좋고 훌륭한 방법들이 많았다 ㅎㅎ;;
arr 배열에 위 데이터들을 넣어주고 해당 배열을 기준으로 잡은 뒤 Arrays.stream 으로 답을 뽑아내는 방법
어마무시하다....
내 문제를 풀어서 공부했다기보다 다른 사람들의 답을 통해 공부가 된 문제였다
정답
import java.util.*;
class Solution {
public int[][] solution(int[][] data, String ext, int val_ext, String sort_by) {
List<int[]> list = new ArrayList<>();
Map<String, Integer> arr = new HashMap<>();
int chNo = 0;
if(sort_by.equals("code")) chNo = 0;
else if(sort_by.equals("date")) chNo = 1;
else if(sort_by.equals("maximum")) chNo = 2;
else if(sort_by.equals("remain")) chNo = 3;
final int sol = chNo;
for(int i=0; i<data.length; i++){
arr.put("code", data[i][0]);
arr.put("date", data[i][1]);
arr.put("maximum", data[i][2]);
arr.put("remain", data[i][3]);
if(arr.containsKey(ext)){
if(arr.get(ext) < val_ext) {
int [] get = new int [4];
get[0] = data[i][0];
get[1] = data[i][1];
get[2] = data[i][2];
get[3] = data[i][3];
list.add(get);
}
}
}
int answer[][] = new int[list.size()][4];
for(int i=0; i<list.size(); i++){
answer[i][0] = list.get(i)[0];
answer[i][1] = list.get(i)[1];
answer[i][2] = list.get(i)[2];
answer[i][3] = list.get(i)[3];
}
Arrays.sort(answer, (o1, o2) -> {
return(o1[sol] - o2[sol]);
});
return answer;
}
}
출처
프로그래머스 - https://school.programmers.co.kr/learn/courses/30/lessons/250121
728x90
반응형
LIST
'코딩 테스트' 카테고리의 다른 글
프로그래머스) 달리기 경주 Lv1 (0) | 2024.02.12 |
---|---|
코딩테스트 준비 (0) | 2024.02.11 |
프로그래머스) [PCCP 기출문제] 1번 / 붕대 감기 Lv1 (0) | 2024.02.09 |
프로그래머스) 올바른 괄호 Lv2 (0) | 2024.02.08 |
프로그래머스) 이진 변환 반복하기 Lv2 (2) | 2024.02.08 |