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 |
Tags
- SQL
- 티스토리챌린지
- 혼공챌린지
- 코테
- 자료구조
- 안드로이드
- join
- Android
- 스터디
- 혼공단
- CS
- 프로그래머스
- Til
- 정보처리기사
- 안드로이드스튜디오
- select
- Kotlin
- groupby
- 정처기
- 자바
- MySQL
- 혼공파
- 알고리즘
- 오블완
- 인프런
- 코틀린
- 기술면접
- 카카오코테
- java
- doitandroid
Archives
- Today
- Total
Welcome! Everything is fine.
[프로그래머스/Lv.1] PCCE 기출문제 10번 / 데이터 분석 - Java 본문
728x90
📌 문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr

📌 풀이
데이터를 기준에 맞게 정렬하는 문제였다. 다른 코드들을 보니 람다식과 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 |