[LeetCode] The K Weakest Rows in a Matrix

아르당·2026년 4월 22일

LeetCode

목록 보기
277/303
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

Problem

m x n 이진 행렬 mat가 주어지고, 각 행렬은 1(군인)과 0(민간인)으로 구성된다. 군인은 민간인 앞에 배치되어 있다. 각 행에서 모든 1은 모든 0 왼쪽에 위치한다.

다음 중 하나라도 true이면 행 i는 행 j보다 약하다.

  • i번째 행의 병사 수는 j번째 행의 병사 수보다 적다.
  • 두 행의 병사 수는 같고 i < j이다.

행렬에서 가장 약한 행부터 가장 강한 행 순으로 정렬된 k개의 가장 약한 행의 인덱스를 반환해라.

Example

#1
Input: mat =
[[1,1,0,0,0],
[1,1,1,1,0],
[1,0,0,0,0],
[1,1,0,0,0],
[1,1,1,1,1]],
k = 3
Output: [2,0,3]
Explanation:
각 행의 군인 수는 다음과 같다.

  • 행 0 : 2
  • 행 1 : 4
  • 행 2 : 1
  • 행 3 : 2
  • 행 4 : 5

약한 것부 강한 것까지 정렬한 행은 [2, 0, 3, 1, 4]이다.

#2
Input: mat =
[[1,0,0,0],
[1,1,1,1],
[1,0,0,0],
[1,0,0,0]],
k = 2
Output: [0,2]
Explanation:
각 행의 군인 수는 다음과 같다.

  • 행 0 : 1
  • 행 1 : 4
  • 행 2 : 1
  • 행 3 : 1

약한 것부 강한 것까지 정렬한 행은 [0, 2, 3, 1]이다.

Constraints

  • m == mat.length
  • n == mat[i].length
  • 2 <= n, m <= 100
  • 1 <= k <= m
  • matrix[i][j]는 0 또는 1이다.

Solved

class Solution {
    public int[] kWeakestRows(int[][] mat, int k) {
        int[][] rowStrengths = new int[mat.length][2];

        for(int i = 0; i < mat.length; i++){
            int strength = 0;

            for(int val : mat[i]){
                strength += val;
            }

            rowStrengths[i][0] = strength;
            rowStrengths[i][1] = i;
        }

        Arrays.sort(rowStrengths, (a, b) -> a[0] == b[0] ? a[1] - b[1] : a[0] - b[0]);

        int[] result = new int[k];

        for(int i = 0; i < k; i++){
            result[i] = rowStrengths[i][1];
        }

        return result;
    }
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글