728x90
반응형
문제
https://school.programmers.co.kr/learn/courses/30/lessons/250121
생각
- 나는 클래스를 활용했다. compare 를 이용했고,, 장렬히전사했다.
- sort 는 제대로 이해하고 쓴 것이 아니었다. 그냥 정렬이니까 쓴 것이지..
- 오답 코드를 보며 반성하기 위해 기록을 남긴다.
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*;
class Solution {
public int[][] solution(int[][] data, String ext, int val_ext, String sort_by) {
int[][] answer = {};
// 1. 순회를 하며 클래스 데이터값을 생성한다.
ArrayList<Info> info = new ArrayList<>();
for (int i = 0; i < data.length; i++) {
Info hubo = new Info(data[i][0],data[i][1],data[i][2],data[i][3]);
// 2. ext 에 따라서 val_ext 값보다 작은 값을 추출한다.
if(ext.equals("num") && hubo.num < val_ext) info.add(hubo);
else if(ext.equals("date") && hubo.date < val_ext) info.add(hubo);
else if(ext.equals("remain") && hubo.remain < val_ext) info.add(hubo);
else if(ext.equals("maxinum") && hubo.maximum < val_ext) info.add(hubo);
}
// 3. sort_by 로 정렬한다.
Collections.sort(info, (o1, o2) -> {
if(sort_by.equals("num")) return o1.num - o2.num;
else if(sort_by.equals("date")) return o1.date - o2.date;
else if(sort_by.equals("remain")) return o1.remain - o2.remain;
else if(sort_by.equals("maxinum")) return o1.maximum-o2.maximum;
return 0;
});
// 4. 답변형식대로 맞춘다.
answer = new int[info.size()][4];
for (int i = 0; i < answer.length; i++) {
answer[i][0] = info.get(i).num;
answer[i][1] = info.get(i).date;
answer[i][2] = info.get(i).maximum;
answer[i][3] = info.get(i).remain;
}
return answer;
}
public static class Info{
int num;
int date;
int maximum;
int remain;
public Info(int i, int i1, int i2, int i3) {
this.num = i;
this.date = i1;
this.maximum = i2;
this.remain = i3;
}
}
}
코드
다른 사람 풀이
- stream 을 이렇게 자유롭게 쓰는 것을 보며 진짜 물경력이 된 느낌이 들었다.
- 해시와 스트림을 이용했다.
public class Main {
public static void main(String[] args) {
System.out.println(solution(new int[][]{{1, 20300104, 100, 80}
, {2, 20300804, 847, 37}
, {3, 20300401, 10, 8}}
,"date", 20300501, "remain"));
}
public static int[][] solution(int[][] data, String ext, int val_ext, String sort_by) {
HashMap<String, Integer> map = new HashMap<>();
map.put("code", 0);
map.put("date", 1);
map.put("maximum", 2);
map.put("remain", 3);
int [][] filtered_data = Arrays.stream(data)
.filter(el -> el[map.get(ext)] < val_ext).toArray(int[][]::new);
Arrays.sort(filtered_data, Comparator.comparingInt(el -> el[map.get(sort_by)]));
return filtered_data;
}
}
728x90
반응형
'Dev > Algorithm' 카테고리의 다른 글
[프로그래머스] 추억 점수 (0) | 2024.05.20 |
---|---|
[프로그래머스] 달리기 경주 (0) | 2024.05.18 |
[프로그래머스] 이웃한 칸 (0) | 2024.05.18 |
[프로그래머스] 개인정보 수집 유효기간 (0) | 2024.05.17 |
[프로그래머스] 가장 많이 받은 선물 (2) | 2024.05.17 |