순간을 성실히, 화려함보단 꾸준함을

[boj : 3495]아스키 도형 본문

알고리즘,SQL/백준,BOJ

[boj : 3495]아스키 도형

폭발토끼 2020. 12. 14. 16:00

www.acmicpc.net/problem/3495

 

3495번: 아스키 도형

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

www.acmicpc.net

문제 : 그냥 문제에 나와있는 도형의 넓이를 구해라

 

해설 : '/' 이나 '\' 은 1/2 의 넓이를 갖는 것이 분명하고 , 문제는 '.' 일때 도형 안과 밖을 구분하여 넓이에 더해주어야 된다. 이를 필자는 처음 잘못 생각해서 상하좌우 쭉 갔을때 '/' 이나 '\' 이 존재하면 count 해서 구분해줄려고 했는데 도형안에 존재하지 않아도 상하좌우에 도형이 감쌓고 있는 경우가 있을 수가 있게 된다.

자세히 보면 처음 줄 부터 시작해서 도형이 열리면 반드시 닫혀야 된다. 이를 유심히 보면 '/' 이 존재하면 반드시 '\' 이 존재해야 하니 이를 홀짝으로 구분해주어 넓이를 계산하면 된다.

 

#include<bits/stdc++.h>

using namespace std;

int n, m;
string board[100];

int main()
{	
	int ans = 0;
	cin >> n >> m;

	for (int i = 0; i < n; i++) {
		cin >> board[i];
		int sum = 0;
		for (int j = 0; j < m; j++) {
			if (board[i][j] == '/' || board[i][j] == '\\')
				sum++,ans+=1;
			if (sum % 2 == 1 && board[i][j] == '.')
				ans += 2;
		}
	}
	cout << ans / 2;
	
	return 0;
}