알고리즘

백준 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;
}