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]]
와 같은 경우
그러면 출력은 17이 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- xy :=0, yz :=0, xz :=0
- 그리드의 각 행 인덱스 r과 행에 대해 다음을 수행합니다.
- yz :=yz + 행의 최대값
- 행의 각 열 인덱스 c와 열 열에 대해 다음을 수행합니다.
- grid[r][c]> 0이 0이 아니면
- xy :=xy + 1
- grid[r][c]> 0이 0이 아니면
- 그리드의 각 열에 대해 다음을 수행합니다.
- 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