알고리즘
백준 3495번 아스키 도형 C++
영춘권의달인
2022. 11. 23. 10:09
https://www.acmicpc.net/problem/3495
3495번: 아스키 도형
창영이는 메모장에 '.', '\', '/'을 이용해서 도형을 그렸다. 각 문자는 그림에서 1*1크기의 단위 정사각형을 나타낸다. '.'은 빈 칸을 나타내며, '/'는 정사각형의 왼쪽 아래 꼭짓점과 오른쪽 위 꼭짓
www.acmicpc.net
그래픽스 시간에 배운 홀수 규칙(Odd Parity Rule)을 이용해서 쉽게 풀었다.
각 높이마다 가로로 선을 그어서 ' . '을 만났을 때 이전에 만났던 ' / '나 ' \ ' 가 홀수개이면 안에 있는 것이고 짝수개이면 밖에 있는 것이다.
#include <iostream>
#include <string>
#include <vector>
#include <math.h>
#include <algorithm>
#include <utility>
#include <stack>
#include <queue>
#include <math.h>
#include <set>
#include <map>
#include <list>
#include <unordered_map>
#include <unordered_set>
#include <iomanip>
#include <limits.h>
using namespace std;
using int64 = long long;
int h, w;
vector<vector<char>> board;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> h >> w;
board = vector<vector<char>>(h, vector<char>(w));
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
cin >> board[i][j];
}
}
float ans = 0;
for (int i = 0; i < h; i++) {
int cnt = 0;
for (int j = 0; j < w; j++) {
if (board[i][j] == '.') {
if (cnt % 2 == 1) ans += 1;
}
else {
ans += 0.5;
cnt++;
}
}
}
cout << ans;
}