N x N 그리드가 있다고 가정하고 1 x 1 x 1 큐브를 배치합니다. 그 안에. 이제 각 값에 대해 v =grid[i][j]는 그리드 셀(i, j) 위에 배치된 v 큐브의 탑을 나타냅니다. 결과 모양의 전체 표면적을 찾아야 합니다.
따라서 입력이 [[1,2],[3,4]]와 같으면 출력은 34가 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- insideArea() 함수를 정의합니다. 이것은 연속으로 걸릴 것입니다
- 면적:=0
- 0~1행의 범위에 있는 i에 대해
- 행[i] 및 행[i + 1]이 0이 아니면
- 면적 :=면적 + 2 * 행[i], 행[i+1]의 최소값
- 행[i] 및 행[i + 1]이 0이 아니면
- 반납 구역
- 메인 방법에서 다음을 수행하십시오 -
- z :=2* (그리드의 모든 행에 대한 (행의 i 값의 합계) 합계)
- x_plus_y :=그리드에 있는 모든 요소의 합 * 4
- x_adjacent :=그리드의 모든 행에 대한 인접 영역(행)의 합
- y_adjacent :=그리드의 모든 열에 대한 인접 영역(행)의 합
- z +(x_plus_y - x_adjacent - y_adjacent)를 반환
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예
class Solution: def surfaceArea(self, grid): def adjacentArea(row): area = 0 for i in range(len(row) - 1): if row[i] and row[i + 1]: area += 2 * min(row[i], row[i+1]) return area z = sum([sum(i > 0 for i in row) for row in grid]) * 2 x_plus_y = sum([sum(row) for row in grid]) * 4 x_adjacent = sum([adjacentArea(row) for row in grid]) y_adjacent = sum([adjacentArea(row) for row in zip(*grid)]) return z + (x_plus_y - x_adjacent - y_adjacent) ob = Solution() print(ob.surfaceArea([[1,2],[3,4]]))
입력
[[1,2],[3,4]]
출력
34