Notice
Recent Posts
Recent Comments
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

블로그 언저리인 무언가

[백준/BOJ] 9715 면적 구하기 본문

Programming/BOJ

[백준/BOJ] 9715 면적 구하기

he1fire 2020. 9. 18. 17:01
728x90

문제 : 9715 면적 구하기

 

9715번: 면적 구하기

아래 다면체는 1x1x1 정육면체로 만들어져있다. 이 문제에서는 블록이 땅에 닿지 않고 공중에 떠있는 경우는 고려하지않는다(각 칸에는 한개 이상의 정육면체가 차곡차곡 쌓아 올려져있다). 이런

www.acmicpc.net

격자 공간에 네모난 박스가 쌓여있는 모양이 주어지고

겉넓이의 면적을 구해 출력하는 문제이다.

모든 위치를 체크하면서 박스가 존재한다면 위, 아래면이 있으므로 2씩 더하고 

각 박스의 층마다 사방을 확인해 비어있거나 높이가 낮다면 1씩 더하게 만들었다.


Code

#include <bits/stdc++.h>
#define ll long long
using namespace std;
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    ll T;
    cin >> T;
    while (T--){
        ll N, M, dir[4][2]={{0,1},{1,0},{0,-1},{-1,0}}, ans=0;
        string S[55];
        cin >> N >> M;
        for (int i=0;i<N;i++)
            cin >> S[i];
        for (int i=0;i<N;i++){
            for (int j=0;j<M;j++){
                ll cnt=0;
                if (S[i][j]!='0'){
                    for (int k=1;k<=S[i][j]-'0';k++){
                        for (int l=0;l<4;l++){
                            ll ax=i+dir[l][0], ay=j+dir[l][1];
                            if (ax<0 || ax>=N || ay<0 || ay>=M || k>S[ax][ay]-'0')
                                cnt++;
                        }
                    }
                    cnt+=2;
                }
                ans+=cnt;
            }
        }
        cout << ans << "\n";
    }
    return 0;
}
728x90

'Programming > BOJ' 카테고리의 다른 글

[백준/BOJ] 5525 IOIOI  (0) 2020.09.19
[백준/BOJ] 1780 종이의 개수  (0) 2020.09.19
[백준/BOJ] 1213 팰린드롬 만들기  (0) 2020.09.18
[백준/BOJ] 1531 투명  (0) 2020.09.18
[백준/BOJ] 15429 Odd Gnome  (0) 2020.09.18
Comments