The K Weakest Rows in a Matrix

-
문제 풀이
- 주어진 mat이차원 배열에서 2차원 배열안에 값들 중 1의 갯수를 카운트하여 적은 순서대로 index를 k인덱스 전까지의 배열로 return하는 문제이다.
-
풀이 소스
class Solution {
class Row{
int idx;
int count;
Row(int idx, int count){
this.idx = idx;
this.count = count;
}
}
public int[] kWeakestRows(int[][] mat, int k) {
PriorityQueue<Row> pq = new PriorityQueue((a ,b)->{
Row row1 = (Row) a;
Row row2 = (Row) b;
if(row1.count == row2.count){
return row1.idx-row2.idx;
}
return row1.count - row2.count;
});
for(int i=0; i< mat.length; i++){
int count = 0;
for(int j=0; j<mat[0].length; j++){
if(mat[i][j] == 1){
count++;
}
}
pq.add(new Row(i, count));
}
int[] arr = new int[k];
for(int i=0; i<k;i++){
arr[i] = pq.poll().idx;
}
return arr;
}
}
오늘의 회고
문제 시도 및 해결
- 우선순위 큐를 선언할때 정렬을 사용하기위해 Comparator클래스의 compare메서드를 람다식을 이용하여 선언한다.
- 이때 정렬을 기본적으로 count가 더 크면 자리를 교환해주며 같을때는 idx에 대해서 비교해준다.
- 우선 2중 for문을 통해 mat[i][j]가 1일때에 대해 카운트한다.
- 카운트한 값을 우선순위큐에 담아준다.
- 그 후 k의 길이만큼 반복분을 통해 pq.poll()을 통해 FIFO인 먼저 들어간 값을 poll()을 통해 가져온 뒤 Row의 객체의 idx를 새로운 배열에 담아 리턴해준다.
학습 내용 및 회고
- PriorityQueue 우선순위큐를 처음써보기에 문제풀이가 어려웠다.
- 처음으로 새로운 클래스를 하나 만들어서 Queue안에 넣으면서 정렬을 사용해보았다.
다음 배울것