이 문제는 m x n 크기의 이진 행렬(mat)이 주어졌을 때 각 행에서 병사(1)와 민간인(0)이 있으며, 병사는 항상 민간인보다 앞에 위치합니다. 주어진 행렬에서 병사의 수가 적은 순서대로 k개의 가장 약한 행의 인덱스를 반환하는 것입니다. 병사의 수가 같으면 인덱스가 작은 행이 더 약합니다.
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]
설명
The number of soldiers in each row is:
Input: mat =
[[1,0,0,0],
[1,1,1,1],
[1,0,0,0],
[1,0,0,0]],
k = 2
Output: [0,2]
설명:
The number of soldiers in each row is:
m == mat.length
n == mat[i].length
2 <= n, m <= 100
1 <= k <= m
matrix[i][j] is either 0 or 1.
class Solution:
def kWeakestRows(self, mat: List[List[int]], k: int) -> List[int]:
soldier_count = []
for i, row in enumerate(mat):
soldier_count.append((sum(row), i))
soldier_count.sort(key=lambda x: (x[0], x[1]))
return [soldier_count[i][1] for i in range(k)]