블라인드


작성일 : 2017-01-10 22:21:01
조회수 : 321



설명

※이 설명은 공식 솔루션이 아닌 작성자의 개인적인 솔루션입니다.


창문의 크기는 4*4로 고정이며, i행 j열의 창문의 왼쪽 위 좌표는


$5*(i-1)+1, 5*(j-1)+1$ 


인 점을 이용하여 창문의 종류를 구해주면 됩니다. 단, 문제에서 주어진 형식의 창문이 아닌 형태가 주어질 수도 있으니 그 부분에 대한 예외처리가 추가되면 됩니다.

#include<iostream>
#include<string>
#include<algorithm>
typedef long long ll;
using namespace std;

string s[501];
int ans[5];
void check(int x, int y)
{
    int ret = 0;
    for (int i = x; i < x + 4; i++)
    {
        string tmp;
        for (int j = y; j < y + 4; j++) tmp += s[i][j];
        if (tmp == "****") ret++;
        else if (tmp != "....") return;
    }
    ans[ret]++;
}
int main()
{
    ios::sync_with_stdio(false);
    
    int w, h;
    

    cin >> w >> h;
    for (int i = 0; i < 5 * w + 1; i++) cin >> s[i];
    for (int i = 0; i < w; i++)
        for (int j = 0; j < h; j++)
            check(5 * i + 1, 5 * j + 1);
    for (int i = 0; i < 5; i++) cout << ans[i] << " ";
}

블라인드 - 알고리즘닷컴
여기서는 https://acmicpc.net 의 문제를 기반으로 한 설명과 소스코드를 포스팅합니다.

36 개의 글