99클럽 코테 스터디 30일차 TIL The K Weakest Rows in a Matrix

방지환·2024년 6월 27일

코테 스터디

목록 보기
37/37

The K Weakest Rows in a Matrix

  • 문제 풀이

    1. 주어진 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안에 넣으면서 정렬을 사용해보았다.
    • 다음 배울것
      • 스프링공부

0개의 댓글