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

Python에서 3D 도형의 표면적

<시간/>

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]의 최소값
  • 반납 구역
  • 메인 방법에서 다음을 수행하십시오 -
  • 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