728x90
⬛ 프로그래머스 (PCCE 기출) | 10번. 데이터 분석 - 구현 문풀 (Java)
💚문제 접근 방식
문제에서는 data[][] 2차원 배열로 들어오는 정보를 뽑아낼 ext 값을 기준으로 int val_ext 보다 작은 값만 추출한 뒤, 그들을 다시 sort_by 값을 기준으로 오름차순 정렬한 데이터를 2차원 배열 형태로 반환하라고 하고 있다.
- 우선 Data 클래스를 하나 선언했다. 이 안에서 내부적으로 2차원 배열과 동일한 셋을 가지되, sortby 값을 모두 갖게끔 만들어서 정렬 시 그 값을 기준으로 오름차순 정렬하도록 compareTo 메소드를 재정의 해뒀다.
- PriorityQueue 우선순위 큐에 Data 객체 값을 가질 건데, 어차피 이 자료구조에 담게 되면 자동정렬 될 거니까. ext값이 ext_Val 값보다 큰 값은 안담을 거라 continue 처리하고 그들을 제외한 값은 모두 담게 만들어서 자동 정렬 시켰다.
- 이후 answer 2차원 배열에다가 pQ에 있는 Data 객체를 하나씩 뽑아서 담고 최종적으로 리턴하면 정답 처리가 된다.
💚 제출 코드
import java.util.*;
class Data implements Comparable<Data>{
int code;
int date;
int maximum;
int remain;
String target; //정렬 기준어
Data(int code, int date, int maximum, int remain, String target){
this.code = code;
this.date = date;
this.maximum = maximum;
this.remain = remain;
this.target = target;
}
@Override
public int compareTo(Data o){ // 각 비교 기준에 따라 정렬
if(this.target.equals("code")){
return this.code - o.code;//오름차순 정렬
}
if(this.target.equals("date")){
return this.date - o.date;
}
if(this.target.equals("maximum")){
return this.maximum - o.maximum;
}
if(this.target.equals("remain")){
return this.remain - o.remain;//더 적게 남은 거 우선 정렬
}
return this.code - o.code;
}
}
class Solution {
//솔루션 함수
public int[][] solution(int[][] data, String ext, int val_ext, String sort_by) {
PriorityQueue<Data> pQ = new PriorityQueue<>();
//data에서 ext값이 val_ext 값보다 작은 데이터만 추출한 후
//[코드번호, 제조일, 최대수량, 현재수량] 순으로 들어옴
for(int[] x : data){
//아래 기준에서 반대 되는 건 continue;
if(ext.equals("date")){
//제조일 기준일 때 더 크다면 넘김
if(val_ext <= x[1]) continue;
}
if(ext.equals("code")){
if(val_ext <= x[0]) continue;
}
if(ext.equals("maximum")){
if(val_ext <= x[2]) continue;
}
if(ext.equals("remain")){
if(val_ext <= x[3]) continue;
}
//위에서 걸리지 않은 애들은 다담음 - 모두 ext 기준값보다 작은 애들만 남은 상황
pQ.offer(new Data(x[0], x[1], x[2], x[3], sort_by));
}
int len = pQ.size();
int[][] answer = new int[len][4];
for(int i=0; i<len; i++){
Data cur = pQ.poll();
answer[i][0] = cur.code;
answer[i][1] = cur.date;
answer[i][2] = cur.maximum;
answer[i][3] = cur.remain;
}
return answer;
}
}
728x90
'코딩 테스트 [준비] > [문풀] 프로그래머스_문풀_조지기' 카테고리의 다른 글
프로그래머스 (카카오) | LV. 1차 비밀지도 - 구현 문풀 (Java) (1) | 2024.07.12 |
---|---|
프로그래머스 (PCCP) | LV.1 이웃한 칸 - BFS 문풀 (Java) (1) | 2024.05.09 |
프로그래머스 (PCCP) | LV.2 석유 시추 - BFS/DFS + 구현 문풀 (Java) (56) | 2024.05.03 |
프로그래머스 | LV.1 모의고사 - 완전탐색 DFS 문풀 (Java) (58) | 2024.05.02 |
프로그래머스 (카카오) | LV.1 숫자 문자열과 영단어 - 구현 문풀 (Java) (56) | 2024.05.02 |