각 셀에 보드가 있는 m x n 그리드 상자가 있다고 가정해 보겠습니다. 각 셀에는 오른쪽 상단에서 왼쪽 하단으로 또는 왼쪽 상단에서 오른쪽 하단으로 배치됩니다. 이제 맨 위 셀에서 공이 상자에 들어가고 그 공이 상자의 맨 아래에 도달하는지 확인해야 합니다. 그리드는 행렬로 제공됩니다. 셀이 1로 표시된 경우 대각선 보드는 왼쪽 상단에서 오른쪽 하단까지 확장됩니다. -1로 표시된 경우 오른쪽 상단에서 왼쪽 하단 모서리까지 이어집니다. n개의 공을 상자에 넣으면 바닥에 닿는 공의 수를 알아내야 합니다.
3x3 격자 상자의 예
따라서 입력이 mat =
와 같은 경우1 | 1 | 1 | -1 |
-1 | 1 | 1 | -1 |
1 | -1 | -1 | 1 |
1 | -1 | 1 | -1 |
그러면 출력은 [-1, -1, -1, -1]
이 됩니다.이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
i :=매트의 행 수
-
j :=매트의 열 수
-
res :=새 목록
-
0 ~ j 범위의 val에 대해 수행
-
x :=발
-
범위 0에서 i까지의 r에 대해 수행
-
s :=매트[r, x]
-
x :=x + 매트[r, x]
-
x <0 또는 x>=j 또는 mat[r, x]가 s와 같지 않으면
-
res
끝에 요소 -1 추가 -
루프에서 나오다
-
-
-
그렇지 않으면
-
res 끝에 x 추가
-
-
-
반환 해상도
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다.
def solve(mat): i, j = map(len, (mat, mat[0])) res = [] for val in range(j): x = val for r in range(i): s = mat[r][x] x += mat[r][x] if x < 0 or x >= j or mat[r][x] != s: res += [-1] break else: res += [x] return res print(solve([[1, 1, 1, -1], [-1, 1, 1, -1], [1, -1, -1, 1],[1, -1, 1, -1] ]))
입력
[[1, 1, 1, -1], [-1, 1, 1, -1], [1, -1, -1, 1],[1, -1, 1, -1] ]
출력
[-1, -1, -1, -1]