Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python의 그리드 상자에서 공이 떨어지는 위치를 찾는 프로그램

<시간/>

각 셀에 보드가 있는 m x n 그리드 상자가 있다고 가정해 보겠습니다. 각 셀에는 오른쪽 상단에서 왼쪽 하단으로 또는 왼쪽 상단에서 오른쪽 하단으로 배치됩니다. 이제 맨 위 셀에서 공이 상자에 들어가고 그 공이 상자의 맨 아래에 도달하는지 확인해야 합니다. 그리드는 행렬로 제공됩니다. 셀이 1로 표시된 경우 대각선 보드는 왼쪽 상단에서 오른쪽 하단까지 확장됩니다. -1로 표시된 경우 오른쪽 상단에서 왼쪽 하단 모서리까지 이어집니다. n개의 공을 상자에 넣으면 바닥에 닿는 공의 수를 알아내야 합니다.

Python의 그리드 상자에서 공이 떨어지는 위치를 찾는 프로그램

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]