2차원 이진 행렬이 있다고 가정합니다. 여기서 1은 폭탄을 나타내고 0은 빈 셀을 나타냅니다. 폭탄이 터지면 같은 행과 열에 있는 모든 공간이 손상됩니다. 손상되지 않도록 서 있을 수 있는 공간의 수를 찾아야 합니다.
따라서 입력이 다음과 같으면
1 | 1 | 0 |
0 | 0 | 0 |
0 | 0 | 0 |
오른쪽 하단 셀과 오른쪽 중간 셀이 두 개의 공백이 있으므로 출력은 2가 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다.
-
r :=행렬의 행 개수와 같은 크기의 목록이고 false로 채우기
-
c :=행렬의 열 개수와 같은 크기의 목록이고 false로 채우기
-
범위 0에서 행렬의 행 수 - 1에 있는 i에 대해 수행
-
범위 0에서 행렬의 열 개수 - 1까지의 j에 대해 수행
-
행렬[i, j]가 1과 같으면
-
r[i] :=참, c[j] :=참
-
-
-
-
CT :=0
-
범위 0에서 행렬의 행 수 - 1에 있는 i에 대해 수행
-
범위 0에서 행렬의 열 개수 - 1까지의 j에 대해 수행
-
r[i]가 False이고 c[j]가 False이면
-
ct :=ct + 1
-
-
-
-
리턴 ct
더 나은 이해를 위해 다음 구현을 살펴보겠습니다.
예
class Solution: def solve(self, matrix): r = [False for i in range(len(matrix))] c = [False for i in range(len(matrix[0]))] for i in range(len(matrix)): for j in range(len(matrix[0])): if matrix[i][j] == 1: r[i] = True c[j] = True ct = 0 for i in range(len(matrix)): for j in range(len(matrix[0])): if r[i] == False and c[j] == False: ct += 1 return ct ob = Solution() matrix = [ [1, 1, 0], [0, 0, 0], [0, 0, 0] ] print(ob.solve(matrix))
입력
[ [1, 1, 0], [0, 0, 0], [0, 0, 0] ]
출력
2