N*M 행렬 A가 있다고 가정하면 이것은 3D 그림의 표현입니다. 점 (i, j)에서 건물의 높이는 A[i][j]입니다. 그림의 표면적을 찾아야 합니다.
따라서 입력이 N =3, M =3, A =[[1, 4, 5],[3, 3, 4],[1, 3, 5]]와 같으면 출력은 72가 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
해상도 :=0
-
범위 0에서 N까지의 i에 대해 수행
-
0에서 M 범위의 j에 대해 수행
-
up_side :=0
-
왼쪽:=0
-
i> 0이면
-
up_side :=배열[i - 1, j]
-
-
j> 0이면
-
left_side :=배열[i, j - 1]
-
-
res :=res + |array[i][j] - up_side| + |배열[i][j] - 왼쪽|
-
i가 N - 1과 같으면
-
res :=res + array[i, j]
-
-
j가 M - 1과 같으면
-
res :=res + array[i, j]
-
-
-
-
res :=res + N * M * 2
-
반환 해상도
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
M = 3 N = 3 def get_surface_area(array): res = 0 for i in range(N): for j in range(M): up_side = 0 left_side = 0 if (i > 0): up_side = array[i - 1][j] if (j > 0): left_side = array[i][j - 1] res += abs(array[i][j] - up_side)+abs(array[i][j] - left_side) if (i == N - 1): res += array[i][j] if (j == M - 1): res += array[i][j] res += N * M * 2 return res array = [[1, 4, 5],[3, 3, 4],[1, 3, 5]] print(get_surface_area(array))
입력
[[1, 4, 5],[3, 3, 4],[1, 3, 5]]
출력
72