Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 카카오코테
- 정보처리기사
- 스터디
- join
- groupby
- 코틀린
- 혼공파
- 프로그래머스
- MySQL
- 자료구조
- Til
- 오블완
- 코테
- 티스토리챌린지
- 알고리즘
- doitandroid
- 기술면접
- java
- 혼공단
- 정처기
- Android
- 안드로이드스튜디오
- CS
- 안드로이드
- 인프런
- select
- SQL
- 혼공챌린지
- Kotlin
- 자바
Archives
- Today
- Total
Welcome! Everything is fine.
[프로그래머스/Lv.1] PCCE 기출문제 10번 / 데이터 분석 - Java 본문
728x90
📌 문제
📌 풀이
데이터를 기준에 맞게 정렬하는 문제였다. 다른 코드들을 보니 람다식과 Comparator가 가장 많이 사용된 것 같다. 내가 작성한 코드의 전체적인 흐름은 다음과 같다.
- 주어진 ext와 sort_by에 맞는 인덱스 e, s를 구한다.
- 조건에 맞는 데이터를 넣을 list를 선언한다.
- data[e]의 값이 val_ext 보다 작을 때만 list에 데이터를 추가한다.
- sort_by에 해당하는 값을 기준으로 오름차순 정렬한다.
- list를 int형 배열로 바꾼 후 반환한다.
주어진 ext와 sort_by에 맞는 인덱스 e, s를 구하는 방법은 다양하다. 나는 처음에 switch문 2개를 사용해 구했지만, 불필요하게 코드가 길다. 더 간단한 방법이 많았다.
switch (ext) {
case "code" :
e = 0;
break;
case "date" :
e = 1;
break;
case "maximum" :
e = 2;
break;
case "remain" :
e = 3;
break;
}
switch (sort_by) {
case "code" :
s = 0;
break;
case "date" :
s = 1;
break;
case "maximum" :
s = 2;
break;
case "remain" :
s = 3;
break;
}
HashMap을 이용하거나 indexOf()를 이용하는 방법도 있었다.
Map<String, Integer> map = new HashMap<>();
map.put("code", 0);
map.put("date", 1);
map.put("maximum", 2);
map.put("remain", 3);
int e = map.get(ext);
int s = map.get(sort_by);
String[] arr = {"code","date","maximum","remain"};
List<String> columnList = Arrays.asList(arr);
int extIdx = columnList.indexOf(ext);
int sortIdx = columnList.indexOf(sort_by);
이렇게 인덱스 값을 구해놓은 뒤, data의 ext값이 val_ex 보다 작으면 list에 해당 데이터를 추가한다.
ArrayList<int[]> list = new ArrayList<>();
for (int[] d : data) {
if (d[e] < val_ext) list.add(d);
}
그리고나서 sort_by를 기준으로 오름차순 정렬한다. ArrayList를 정렬할 때는 Collections.sort()를 사용하고, Comparator를 람다식으로 적어 간단하게 표현했다. 지난 포스팅에서 Comparator를 정리했으니 참고하면 된다.
Collections.sort(list, (o1, o2) -> o1[s] - o2[s]);
📌 전체 코드
처음 작성한 코드
import java.util.*;
class Solution {
int e, s;
public int[][] solution(int[][] data, String ext, int val_ext, String sort_by) {
switch (ext) {
case "code" :
e = 0;
break;
case "date" :
e = 1;
break;
case "maximum" :
e = 2;
break;
case "remain" :
e = 3;
break;
}
switch (sort_by) {
case "code" :
s = 0;
break;
case "date" :
s = 1;
break;
case "maximum" :
s = 2;
break;
case "remain" :
s = 3;
break;
}
ArrayList<int[]> list = new ArrayList<>();
for (int[] d : data) {
if (d[e] < val_ext) {
list.add(d);
}
}
Collections.sort(list, (o1, o2)->{
return o1[s] - o2[s];
});
int[][] answer = new int[list.size()][];
for (int i = 0; i < list.size(); i++) {
answer[i] = list.get(i);
}
return answer;
}
}
수정한 코드
import java.util.*;
class Solution {
public int[][] solution(int[][] data, String ext, int val_ext, String sort_by) {
Map<String, Integer> map = new HashMap<>();
map.put("code", 0);
map.put("date", 1);
map.put("maximum", 2);
map.put("remain", 3);
int e = map.get(ext);
int s = map.get(sort_by);
ArrayList<int[]> list = new ArrayList<>();
for (int[] d : data) {
if (d[e] < val_ext) list.add(d);
}
Collections.sort(list, (o1, o2) -> o1[s] - o2[s]);
int[][] answer = new int[list.size()][];
for (int i = 0; i < answer.length; i++) {
answer[i] = list.get(i);
}
return answer;
}
}
📌 다른 코드
람다식으로 푼 답안인데 아직 람다식은 익숙하지 않아서 어렵다..
import java.util.*;
class Solution {
public int[][] solution(int[][] data, String ext, int val_ext, String sort_by) {
String[] arr = {"code","date","maximum","remain"};
List<String> columnList = Arrays.asList(arr);
int extIdx = columnList.indexOf(ext);
int sortIdx = columnList.indexOf(sort_by);
int[][] answer = Arrays.stream(data).filter(o1 -> o1[extIdx] < val_ext)
.sorted((o1 ,o2) -> o1[sortIdx]-o2[sortIdx]).toArray(int[][]::new);
return answer;
}
}
'프로그래머스 > Lv.1' 카테고리의 다른 글
[프로그래머스/Lv.1] 기사단원의 무기 - Java (1) | 2024.04.19 |
---|---|
[프로그래머스/Lv.1] 신규 아이디 추천(2021 KAKAO BLIND RECRUITMENT) - Java (1) | 2024.04.19 |
[프로그래머스/Lv.1] 2016년 - Java (0) | 2024.04.18 |
[프로그래머스/Lv.1] 바탕화면 정리 - Java (0) | 2024.04.16 |
[프로그래머스/Lv.1] 카드뭉치 - Java (0) | 2024.04.16 |