The K Weakest Rows in a Matrix

제로콜라좋아요·2024년 6월 27일
0

algorithem

목록 보기
36/37

문제설명

이 문제는 m x n 크기의 이진 행렬(mat)이 주어졌을 때 각 행에서 병사(1)와 민간인(0)이 있으며, 병사는 항상 민간인보다 앞에 위치합니다. 주어진 행렬에서 병사의 수가 적은 순서대로 k개의 가장 약한 행의 인덱스를 반환하는 것입니다. 병사의 수가 같으면 인덱스가 작은 행이 더 약합니다.

예제 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]

설명
The number of soldiers in each row is:

  • Row 0: 2
  • Row 1: 4
  • Row 2: 1
  • Row 3: 2
  • Row 4: 5
    The rows ordered from weakest to strongest are [2,0,3,1,4].

Example 2:

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:

  • Row 0: 1
  • Row 1: 4
  • Row 2: 1
  • Row 3: 1
    The rows ordered from weakest to strongest are [0,2,3,1].

제약조건:

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)]

<내 코드의 흐름>

  1. kWeakestRows라는 메서드를 정의합니다.
  • 이 메서드는 mat라는 2차원 리스트(행렬)와 k라는 정수를 입력으로 받고, 정수 리스트를 반환합니다.
  1. 병사 수와 행 인덱스를 저장하기 위한 빈 리스트를 초기화합니다.
  2. 행렬 mat의 각 행을 열거합니다. i는 행의 인덱스, row는 행의 내용을 나타냅니다.
  3. 각 행의 병사 수(sum(row))와 행 인덱스(i)를 튜플로 묶어 soldier_count 리스트에 추가합니다.
  4. soldier_count 리스트를 병사 수(x[0])와 인덱스(x[1])를 기준으로 오름차순 정렬합니다.
  • 병사 수가 같으면 인덱스를 기준으로 정렬합니다.
  1. 정렬된 soldier_count 리스트에서 상위 k개의 행 인덱스를 추출하여 반환합니다.
profile
개발자계의 제로콜라

0개의 댓글