개발 일지
1337. The K Weakest Rows in a Matrix (행렬에서 가장 약한 K 행) 본문
1's(군인을 나타냄)와 0's(민간인을 나타냄)의 m*n 이진 행렬 매트가 주어집니다. 군인들은 민간인들 앞에 배치됩니다. 즉, 각 행에 있는 모든 0의 왼쪽에 모든 1의 행렬이 나타납니다.
다음 중 하나가 참일 경우 i행이 j행보다 약합니다:
- i행의 군인의 수가 j행의 군인의 수보다 적을 경우.
- 두 행 모두 동일한 수의 군인일 경우 i < j.
가장 약한 행부터 가장 강한 정렬된 행렬에서 k까지의 행렬을 반환합니다.
예시 1:
입력: 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
출력: [2,0,3]
설명:
각 행의 군인의 수는 다음과 같습니다:
- 0행: 2
- 1행: 4
- 2행: 1
- 3행: 2
- 4행: 5
가장 약한 행에서 가장 강한 행으로 순서가 매겨진 행은 [2,0,3,1,4]입니다.
예시 2:
입력: mat =
[[1,0,0,0],
[1,1,1,1],
[1,0,0,0],
[1,0,0,0]],
k = 2
출력: [0,2]
설명:
각 행의 군인의 수는 다음과 같습니다:
- 0행: 1
- 1행: 4
- 2행: 1
- 3행: 1
가장 약한 행에서 가장 강한 행으로 순서가 매겨진 행은 [0,2,3,1]입니다.
조건:
- m == mat.length
- n == mat[i].length
- 2 <= n, m <= 100
- 1 <= k <= m
- matrix[i][j]은 0 또는 1입니다.
정답:
public class Solution {
public int[] KWeakestRows(int[][] mat, int k) {
Dictionary<int, int> result = new Dictionary<int, int>();
for (int i = 0; i < mat.Length; i++)
{
result.Add(i, Array.FindAll(mat[i], x => x == 1).Length);
}
result = result.OrderBy(item => item.Value).ToDictionary(x => x.Key, x => x.Value);
return result.Keys.Take(k).ToArray();
}
}
해설: 일단 Dictionary를 만들어주어 해당 i행의 군인의 수를 세준 후 Linq를 이용하여 군인의 수를 기준으로 오름차 순으로 정렬해주었습니다.
그리고 군인의 수를 기준으로 정렬된 Dictionary의 Key 값만 Take로 k까지 잘라서 return 해주었습니다.
'코딩 테스트 > LeetCode' 카테고리의 다른 글
59. Spiral Matrix II (나선형 매트릭스 II) (0) | 2024.03.20 |
---|---|
27. Remove Element (요소 제거) (0) | 2024.03.19 |
565. Array Nesting (배열 중첩) (0) | 2023.11.01 |
2047. Number of Valid Words in a Sentence (문장의 유효한 단어 수) (0) | 2023.10.30 |
779. K-th Symbol in Grammar (문법의 K번째 기호) (0) | 2023.10.27 |