-
백준 16931번 겉넓이 구하기PS 2020. 3. 21. 04:49
https://www.acmicpc.net/problem/16931
16931번: 겉넓이 구하기
크기가 N×M인 종이가 있고, 종이는 1×1크기의 칸으로 나누어져 있다. 이 종이의 각 칸 위에 1×1×1 크기의 정육면체를 놓아 3차원 도형을 만들었다. 종이의 각 칸에 놓인 정육면체의 개수가 주어졌을 때, 이 도형의 겉넓이를 구하는 프로그램을 작성하시오. 위의 그림은 3×3 크기의 종이 위에 정육면체를 놓은 것이고, 겉넓이는 60이다.
www.acmicpc.net
<접근방법>
각 블록기둥의 겉넓이를 구해 모두 더해서 답을 구합니다.
블록기둥의 위아래는 무조건 각각 1 입니다.
블록기둥의 상, 하, 좌, 우는 붙어있는 블록기둥과의 높이차 입니다.
블록기둥을 입력받을 때 한 칸씩 띄워서 받아서 구현편의성을 높였습니다.
<느낀 점>
<코드>
#include <iostream> #include <algorithm> using namespace std; int n, m, map[105][105], row_max[100], col_max[100]; int dy[4] = { 1, -1, 0, 0 }; int dx[4] = { 0, 0, 1, -1 }; int main() { cin >> n >> m; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { cin >> map[i][j]; } } int res = 0; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { for (int d = 0; d < 4; d++) { int ty = i + dy[d]; int tx = j + dx[d]; int gap = map[i][j] - map[ty][tx]; if (gap > 0) { res += gap; } } } } res += 2 * n * m; cout << res << '\n'; return 0; }
반응형'PS' 카테고리의 다른 글
백준 5014번 스타트링크 (0) 2020.03.24 백준 17069번 파이프 옮기기2 (0) 2020.03.22 백준 16974번 레벨 햄버거 (0) 2020.03.19 백준 16948번 데스 나이트 (0) 2020.03.19 백준 16928번 뱀과 사다리 게임 (0) 2020.03.19