Memo
로직 설명
•
위에서 볼 때, 밑에서 볼 때 ⇒ 2 * N * M
•
옆에서 볼 때, 배열을 90도씩 회전시켜가며 동일한 로직 수행 ⇒ 바로 이전의 높이가 현재 높이보다 클 경우 계산 x (가리므로), 작을 경우 현재 높이를 이전 높이에서 빼줍니다.
Code
제출 날짜
@4/24/2021
import sys
g_map = []
N, M = map(int, sys.stdin.readline().split())
tmp = [[0 for _ in range(max(M, N))] for _ in range(max(M, N))]
for _ in range(N):
a = list(map(int, sys.stdin.readline().split()))
g_map.append(a)
def rotate_list():
global N, M
for j in range(M):
for i in range(N - 1, -1, -1):
tmp[j][N - 1 - i] = g_map[i][j]
N,M = M,N
ans = 2 * N * M #밑, 위에서 볼 때
for _ in range(4):
for j in range(M):
prev = 0
for i in range(N):
if (g_map[i][j] > prev):
ans += g_map[i][j] - prev
prev = g_map[i][j]
rotate_list() # 행렬 90도 회전
tmp, g_map = g_map, tmp
print(ans)
Python
복사