The K Weakest Rows in a Matrix - LeetCode
문제 접근 🤔
- 이 문제는 각 행의 전사 수를 기준으로 가장 약한 행부터 강한 행까지
k 개를 찾아 반환하는 문제이다.
heapq 에 값을 튜플 형태로 저장하면 정렬의 우선순위를 정할 수 있다.
- 전사의 수가 더 적은 행이 약하다.
- 전사의 수가 같다면 행렬에서 인덱스 값이 더 낮은 행이 약하다.
- 즉 값으로
(전사의 수, 인덱스) 를 저장해준다면 힙에는 전사의 수가 더 낮은 순으로 저장되고, 전사의 수가 같다면 인덱스가 낮은 순으로 저장된다.
- 전사는 1로 나타내므로 각 행마다
collections.Counter 함수를 사용하여 1의 개수를 추출하고, 힙에 이 값과 행의 인덱스 값을 저장한다.
heapq.heappop(힙) 을 이용하여 약한 행의 정보를 k 번 꺼내어 행의 인덱스 값을 리스트에 담아주고 이 리스트를 최종 출력하면 된다.
놓쳤던 부분 😅
코드 😁
파이썬 코드(97 ms)
from collections import Counter
import heapq
class Solution:
def kWeakestRows(self, mat: List[List[int]], k: int) -> List[int]:
heap, answer = [], []
for idx, row in enumerate(mat):
heapq.heappush(heap, (Counter(row)[1], idx))
while k:
answer.append(heapq.heappop(heap)[1])
k -= 1
return answer