창영이는 메모장에 '.', '\', '/'을 이용해서 도형을 그렸다. 각 문자는 그림에서 1*1크기의 단위 정사각형을 나타낸다.
'.'은 빈 칸을 나타내며, '/'는 정사각형의 왼쪽 아래 꼭짓점과 오른쪽 위 꼭짓점이 연결된 선분을, '\'은 왼쪽 위 꼭짓점과 오른쪽 아래 꼭짓점이 연결된 선분을 나타낸다.
창영이가 그린 도형의 넓이를 출력하는 프로그램을 작성하시오.
첫째 줄에 h와 w가 주어진다. h는 그림의 높이, w는 너비이다. (2 ≤ h,w ≤ 100)
다음 h개 줄에는 창영이가 메모장에 그린 다각형이 주어진다.
창영이가 그린 다각형은 1개이고, 변과 변이 서로 교차하는 경우는 없고, 자기 자신과 접하는 경우도 없다.
첫째 줄에 다각형의 넓이를 출력한다.
https://www.acmicpc.net/problem/3495
#define _CRT_SECURE_NO_WARNINGS
#include <bits/stdc++.h>
int h, w, ** pic, area=0;
void init() {
scanf("%d%d", &h, &w);
pic = new int* [h];
for (int i = 0; i < h; i++) {
pic[i] = new int[w];
char _;
scanf("%c", &_); //줄바꿈문자지움
for (int j = 0; j < w; j++) {
scanf("%c", &_);
if (_ == '/' || _ == '\\')
pic[i][j] = 1;
else
pic[i][j] = 0;
}
}
}
void func() {
//가로로 탐색해가며, 칠해진정사각형갯수를 찾음
for (int i = 0; i < h; i++) {
int cnt = 0;
int crossCnt = 0;
for (int j = 0; j < w; j++) {
if (pic[i][j] == 1) {
crossCnt++;
if (crossCnt % 2 != 0) //홀수번째 대각선일때
cnt = 0;
else //짝수번째
area += cnt;
}
else
cnt++;
}
area += crossCnt / 2;
}
printf("%d", area);
}
int main(void) {
init();
func();
return 0;
}