No Rules Rules

빙고 (feat. 백준, 2578번) 본문

생활/코테

빙고 (feat. 백준, 2578번)

개발하는 완두콩 2023. 3. 8. 12:57
728x90
반응형

빙고
https://www.acmicpc.net/problem/2578

 

2578번: 빙고

첫째 줄부터 다섯째 줄까지 빙고판에 쓰여진 수가 가장 위 가로줄부터 차례대로 한 줄에 다섯 개씩 빈 칸을 사이에 두고 주어진다. 여섯째 줄부터 열째 줄까지 사회자가 부르는 수가 차례대로

www.acmicpc.net

 

// woohyeon.kim
// kim519620.tistory.com
#include <iostream>
#include <string.h>
#include <queue>
#include <algorithm>
using namespace std;
pair<int, int> arr[26];
bool chk[6][6];
bool check(){
    register int cnt = 0, ans = 0;
    // (1,1)에서 (5,5) 대각선 빙고 여부
    for(register int i = 1; i <= 5; ++i)
        if(chk[i][i])
            ++cnt;
    if(cnt == 5)
        ++ans;
    // (5,1)에서 (1,5) 대각선 빙고 여부
    cnt = 0;
    for(register int i = 1; i <= 5; ++i)
        if(chk[i][6 - i])
            ++cnt;
    if(cnt == 5)
        ++ans;
    // 가로줄 빙고 여부
    for(register int i = 1, j; i <= 5; ++i){
        cnt = 0;
        for(j = 1; j <= 5; ++j)
            if(chk[i][j])
                ++cnt;
        if(cnt == 5)
            ++ans;
    }
    // 세로줄 빙고 여부
    for(register int j = 1, i; j <= 5; ++j){
        cnt = 0;
        for(i = 1; i <= 5; ++i)
            if(chk[i][j])
                ++cnt;
        if(cnt == 5)
            ++ans;
    }
    // 빙고 3줄 이상시 리턴
    if(ans >= 3)
        return true;
    return false;
}
int main(){
    ios::sync_with_stdio(false), cin.tie(NULL);
    memset(chk, false, sizeof(chk));
    for(register int i = 1, j, v; i <= 5; ++i)
        for(j = 1; j <= 5; ++j)
            cin >> v, arr[v] = make_pair(i, j);
    queue<int> q;
    for(register int x = 0, n, v; x < 5; ++x)
        for(n = 0; n < 5; ++n)
            cin >> v, q.push(v);
    register int cnt = 0;
    while(!q.empty()){
        auto p = q.front(); q.pop(); ++cnt;
        chk[arr[p].first][arr[p].second] = true;
        if(check()){
            cout << cnt;        // 빙고 성공시 번호 순서 출력 후 종료
            break;
        }
    }
	return 0;
}
// *&)*@*

 

반응형

노가다성 구현 문제입니다.

풀이는 주석으로 대체합니다.

728x90
반응형
Comments