-
백준 16931번 : 겉넓이 구하기 (C 언어)c c++ 언어 공부 2023. 8. 30. 11:09
https://www.acmicpc.net/problem/16931
16931번: 겉넓이 구하기
크기가 N×M인 종이가 있고, 종이는 1×1크기의 칸으로 나누어져 있다. 이 종이의 각 칸 위에 1×1×1 크기의 정육면체를 놓아 3차원 도형을 만들었다. 종이의 각 칸에 놓인 정육면체의 개수가 주어
www.acmicpc.net
Code:
12345678910111213141516171819202122232425262728293031#include <stdio.h>int arr[102][102];int dx[] = { -1,1,0,0 };int dy[] = { 0,0,-1,1 };int main() {int n, m;scanf("%d %d", &n, &m);int sum = 0;sum = 2 * n * m;for (int i = 1 ; i<= n; i++){for (int j = 1; j <= m; j++){scanf("%d", &arr[i][j]);}}for (int x = 1; x <= n; x++) {for (int y = 1; y <= m; y++) {for (int i = 0; i < 4; i++) {int nx = x + dx[i];int ny = y + dy[i];if (arr[x][y] > arr[nx][ny])sum += (arr[x][y] - arr[nx][ny]);}}}printf("%d", sum);}cs 문제 설명:
- 크기가 N×M인 종이가 주어지며, 이 종이 위에 1×1×1 크기의 정육면체를 놓아 3차원 도형을 만들었습니다.
- 각 종이 칸에 놓인 정육면체의 개수가 주어지고, 이 도형의 겉넓이를 계산해야 합니다.
코드 설명:
- 먼저, 종이의 크기 N과 M을 입력으로 받습니다.
- 2 * N * M을 sum에 할당합니다. 이 부분은 초기 겉넓이를 2배로 설정하는 부분으로, 각 칸에 놓인 정육면체의 수만큼 겉넓이가 줄어들기 때문에 초기 값을 설정합니다.
- 이어서 N개의 줄에 걸쳐 각 칸에 놓인 정육면체의 수를 입력받습니다. 입력한 수를 배열 arr에 저장합니다.
- 이제 각 칸에서 상하좌우로 이동하면서 겉넓이를 계산합니다. 중첩된 반복문을 사용하여 각 칸을 탐색합니다.
- dx와 dy 배열은 상하좌우 이동을 위한 델타 값입니다.
- 현재 칸의 정육면체 수와 인접한 칸의 정육면체 수를 비교하여 겉넓이를 조정합니다. 만약 현재 칸의 정육면체 수가 더 크다면, 겉넓이에 (현재 칸의 수 - 인접한 칸의 수)를 더합니다. 이렇게 하면 현재 칸과 인접한 칸 간의 겉넓이 차이를 계산할 수 있습니다.
- 모든 칸을 탐색한 후, 최종적인 겉넓이를 출력합니다.
'c c++ 언어 공부' 카테고리의 다른 글
백준 1547번 : 공 (C 언어) (0) 2023.09.01 백준 : 20291번 (C 언어) (0) 2023.08.31 백준 5635번 : 생일 (C 언어) (0) 2023.08.30 백준 11170번 : 0의 개수(C 언어) (0) 2023.08.29 백준 14495번 : 피보나치 비스무리한 수열(C 언어) (0) 2023.08.29