[Baekjoon] 겉넓이 구하기

Updated:

문제

크기가 N×M인 종이가 있고, 종이는 1×1크기의 칸으로 나누어져 있다. 이 종이의 각 칸 위에 1×1×1 크기의 정육면체를 놓아 3차원 도형을 만들었다.

종이의 각 칸에 놓인 정육면체의 개수가 주어졌을 때, 이 도형의 겉넓이를 구하는 프로그램을 작성하시오.

img

위의 그림은 3×3 크기의 종이 위에 정육면체를 놓은 것이고, 겉넓이는 60이다.

입력

첫째 줄에 종이의 크기 N, M이 주어진다. 둘째 줄부터 N개의 줄에는 종이의 각 칸에 놓인 정육면체의 수가 주어진다.

출력

첫째 줄에 도형의 겉넓이를 출력한다.

예제

Example 1:

Input: 
1 1
1
Output: 
6

Example 2:

Input:
3 3
1 3 4
2 2 3
1 2 4
Output:
60

조건

시간 제한 : 1초

메모리 제한 : 512 MB

풀이과정

풀이 1

n, m = map(int, input().split())

arr = []

for _ in range(n):
    arr.append(list(map(int, input().split())))

ans = [[2]*m for _ in range(n)]

dx = [0, 1, 0, -1]
dy = [1, 0, -1, 0]

for i in range(n):
    for j in range(m):
        for k in range(4):
            ni = i + dx[k]
            nj = j + dy[k]
            if 0 <= ni <= n-1 and 0 <= nj <= m-1:
                if arr[ni][nj] > arr[i][j]:
                    ans[i][j] += (arr[ni][nj] - arr[i][j])
            else:
                ans[i][j] += arr[i][j]

res = 0
for a in ans:
    res += sum(a)
print(res)

Leave a comment