본문 바로가기

백준/실버

[백준 3495번] 아스키 도형 (C++)

문제링크 : https://www.acmicpc.net/problem/3495

 

3495번: 아스키 도형

창영이는 메모장에 '.', '\', '/'을 이용해서 도형을 그렸다. 각 문자는 그림에서 1*1크기의 단위 정사각형을 나타낸다. '.'은 빈 칸을 나타내며, '/'는 정사각형의 왼쪽 아래 꼭짓점과 오른쪽 위 꼭짓

www.acmicpc.net

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define MAX 987654321
#define pii pair <int, int>

char arr[101][101];

int main() 
{
	ios_base::sync_with_stdio(false); 
	cin.tie(0);
   
	int H, W;
	int result = 0;
	cin >> H >> W;
	for(int i=0; i<H; i++)
	{
		for(int j=0; j<W; j++)
		{
			cin >> arr[i][j];
		}
	}

	for(int i=0; i<H; i++)
	{
		int cnt = 0;
		for(int j=0; j<W; j++)
		{
			if(arr[i][j] == '/' || arr[i][j] == '\\') //괄호당 넓이 0.5
			{
				cnt++; //슬래쉬 갯수
				result+=1;
			}

			if(cnt % 2 && arr[i][j]=='.') result +=2; //열려있으면 점 갯수 세기
		}
	}

	cout << result / 2;
    return 0;
}

괄호 일때는 넓이가 0.5 이고, 점일때는 넓이가 1이다.

괄호의 갯수를 체크하여 괄호가 홀수개이면 열려있는 상태이기에 점이 도형 내부에 있는 것이고,

괄호가 짝수개이면 닫혀있는 상태이기에 점이 도형 외부에 있는 것이기에 개수를 세지 않는다.

 

여기서는 int 값으로 계산하기 위해 값을 2배해주고 결과값에서 2를 나눠주었다.