매트릭스 매트가 있다고 가정합니다. 다음과 같이 몇 가지 다른 값이 있습니다. 행렬의 셀에는 이 3개의 문자 중 하나가 포함될 수 있습니다.
- 빈 영역은 0입니다.
- 폭탄 1개.
- 적을 위한 2개.
이제 폭탄은 한쪽 끝에서 다른 쪽 끝으로 수평 및 수직 방향으로만 폭발할 수 있습니다. 폭탄이 터지면 적들이 모두 죽는지 확인해야 합니다.
따라서 입력이 다음과 같으면
0 | 0 | 2 | 0 |
0 | 1 | 0 | 0 |
0 | 2 | 0 | 0 |
0 | 0 | 1 | 0 |
그러면 [1, 1] 위치의 폭탄이 [2, 1] 위치의 적을 채울 수 있고 [0, 2]의 적이 [3, 2]에 배치된 폭탄으로 죽기 때문에 출력은 True가 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- r :=매트의 행 수
- c :=매트의 열 수
- i :=0, j :=0, x :=0, y :=0
- 0 ~ r - 1 범위의 i에 대해
- 0 ~ c - 1 범위의 j에 대해
- mat[i,j]가 1이면
- 0 ~ r - 1 범위의 x에 대해
- mat[x, j]가 1이 아니면
- 매트[x, j] :=0
- mat[x, j]가 1이 아니면
- 0 ~ c - 1 범위의 y에 대해
- mat[i, y]가 1이 아니면
- 매트[i, y] :=0
- mat[i, y]가 1이 아니면
- 0 ~ r - 1 범위의 x에 대해
- mat[i,j]가 1이면
- 0 ~ c - 1 범위의 j에 대해
- 0 ~ r - 1 범위의 i에 대해
- 0 ~ c - 1 범위의 j에 대해
- mat[i, j]가 2이면
- 거짓을 반환
- mat[i, j]가 2이면
- 0 ~ c - 1 범위의 j에 대해
- 참 반환
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
def solve(mat): r = len(mat) c = len(mat[0]) i, j, x, y = 0, 0, 0, 0 for i in range(r): for j in range(c): if mat[i][j] == 1: for x in range(r): if mat[x][j] != 1: mat[x][j] = 0 for y in range(c): if mat[i][y] != 1: mat[i][y] = 0 for i in range(r): for j in range(c): if mat[i][j] == 2: return False return True matrix = [ [0,0,2,0], [0,1,0,0], [0,2,0,0], [0,0,1,0] ] print(solve(matrix))
입력
[ [0,0,2,0], [0,1,0,0], [0,2,0,0], [0,0,1,0] ]
출력
True