python
99클럽 코테 스터디 30일차 TIL
kwon6680
2024. 6. 27. 23:21
오늘의 공부 키워드
1337 The K Weakest Rows in a Matrix
1337 The K Weakest Rows in a Matrix
이 문제는 이진 행렬에서 각 행의 군인 수를 계산하고, 주어진 k 값에 따라 가장 약한 행의 인덱스를 반환하는 문제입니다. 주어진 조건에 따라 각 행의 군인 수를 계산하고, 같은 수의 군인을 가진 행은 인덱스 순서대로 정렬합니다. 이를 통해 가장 약한 k개의 행을 구할 수 있습니다.
문제를 해결하는 방법은 다음과 같습니다:
- 각 행의 군인 수를 계산합니다.
- 행의 인덱스와 군인 수를 튜플로 묶어 리스트를 만듭니다.
- 이 리스트를 군인 수와 인덱스를 기준으로 정렬합니다.
- 정렬된 리스트에서 가장 약한 k개의 행의 인덱스를 추출합니다.
파이썬코드
def kWeakestRows(mat, k):
# 각 행의 군인 수를 계산하여 리스트 생성
soldiers_count = [(sum(row), index) for index, row in enumerate(mat)]
# 군인 수와 인덱스를 기준으로 정렬
soldiers_count.sort()
# 가장 약한 k개의 행의 인덱스를 추출하여 반환
return [index for _, index in soldiers_count[:k]]
# 예시 입력
mat1 = [
[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]
]
k1 = 3
mat2 = [
[1, 0, 0, 0],
[1, 1, 1, 1],
[1, 0, 0, 0],
[1, 0, 0, 0]
]
k2 = 2
# 결과 출력
print(kWeakestRows(mat1, k1)) # Output: [2, 0, 3]
print(kWeakestRows(mat2, k2)) # Output: [0, 2]
이 코드는 각 행의 군인 수를 계산하고, 이를 이용해 행을 정렬한 후 가장 약한 k개의 행의 인덱스를 반환합니다. 행렬의 각 행은 튜플 형태로 군인 수와 인덱스를 가지고 정렬되며, 이를 통해 약한 행을 쉽게 찾을 수 있습니다.