🍋 문제링크


https://www.acmicpc.net/problem/16931

🍎 코드 제출 기록 (메모리 및 시간)


제출 날짜

2021/04/23

메모리

123532 KB

시간

132 ms

🥝 메모


🍓 문제풀이


겉넓이를 구하기 위해서는 입체도형의 up, down, front, back, left, right 에서 보이는 사각형들의 합을 구하면 된다

up, down = N * M

left, right = 1 ~ N 에서 맨 앞 블록 높이 + (j번째 블록높이 - (j-1)번째 블록높이) → 양수일때만

front, back = 1 ~ M 에서 맨 앞 블록 높이 + (i번째 블록높이 - (i-1)번째 블록높이) → 양수일때만

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/7dce330a-381a-41b0-abbd-a4dee8a05444/1.png

🍉 Code


N, M = map(int, input().split())
arr = [list(map(int, input().split())) for _ in range(N)]

up = N * M

left = 0
for i in range(N):
    for j in range(M):
        if j == 0:
            left += arr[i][j]
        else:
            if arr[i][j-1] < arr[i][j]:
                left += arr[i][j] - arr[i][j-1]

front = 0
for j in range(M):
    for i in range(N):
        if i == 0:
            front += arr[i][j]
        else:
            if arr[i-1][j] < arr[i][j]:
                front += arr[i][j] - arr[i-1][j]
        
answer = 2 * (up + left + front)
print(answer)