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

3D 모양의 투영 영역

<시간/>

N x N 그리드가 있다고 가정하고 x, y 및 z와 축 정렬된 1 x 1 x 1 큐브를 배치합니다. 여기서 각 값 v =grid[i][j]는 그리드 셀(i, j) 위에 배치된 v 큐브의 타워를 보여줍니다. xy, yz 및 zx 평면에 대한 이러한 큐브의 투영을 봅니다. 여기에서 큐브를 위에서 볼 때, 정면에서, 측면에서 볼 때 투영을 보고 있습니다. 세 가지 투영의 전체 면적을 찾아야 합니다.

따라서 입력이 [[1,2],[3,4]]

와 같은 경우

3D 모양의 투영 영역

그러면 출력은 17이 됩니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • xy :=0, yz :=0, xz :=0
  • 그리드의 각 행 인덱스 r과 행에 대해 다음을 수행합니다.
    • yz :=yz + 행의 최대값
    • 행의 각 열 인덱스 c와 열 열에 대해 다음을 수행합니다.
      • grid[r][c]> 0이 0이 아니면
        • xy :=xy + 1
    • 그리드의 각 열에 대해 다음을 수행합니다.
      • xz :=xz + 열의 최대값
  • xy + yz + xz를 반환

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

예시

class Solution(object):
   def projectionArea(self, grid):
      xy = 0
      yz = 0
      xz = 0
      for r, row in enumerate(grid):
         yz += max(row)
         for c, col in enumerate(row):
            if grid[r][c] > 0:
               xy += 1
            for col in zip(*grid):
               xz += max(col)
      return xy + yz + xz
ob = Solution()
print(ob.projectionArea([[1,2],[3,4]]))

입력

[[1,2],[3,4]]

출력

17