본문 바로가기

백준

2578)빙고

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


빙고 게임을 하는 방법은 누구나 잘 알고 있다.


어떻게 빙고 게임을 하는지 생각해보면 쉽게 문제를 풀 수 있다.


1.우선 자신의 보드를 만들기 위해 5x5만큼의 수들을 입력 받는다.


2.사회자가 부른 수 하나를 입력 받고 내 빙고판에 해당 수가 있는 지 검사한다.


 2-1.내 빙고판에 해당하는 수가 있다면 그 위치에 CHECK를 저장한다.


3.자신의 보드가 빙고인지 검사한다.


빙고인지 검사하기 위해 일렬로 CHECK가 나열되어 있는지 검사한다.


CHECK는 0에 이름을 붙인 것인데, 보드의 어떤 수를 합하더라도 0보다 크다.


그래서 한 줄에 CHECK로 나열되어 있다면 그 라인의 합은 0이다.


라인 검사를 통해 라인 합이 0이 되는 경우를 카운팅한다.


이 갯수가 3 이상일 때 사회자가 수를 부른 횟수를 킵하고 출력한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include<stdio.h>
#define CHECK 0    
#define ROW 5
#define COL 5
 
typedef enum _BOOL {
    FALSE = 0, TRUE = 1
}BOOL;
 
int checkBingo(int board[ROW][COL]) {
    int count = 0;
    int sum = 0;
 
    for (int i = 0; i < ROW;i++) {
        for (int j = 0; j < COL;j++) {
            sum += board[i][j];
        }
        if (sum == 0) count++;
        sum = 0;
    }
 
    for (int i = 0; i < COL; i++) {
        for (int j = 0; j < ROW; j++) {
            sum += board[j][i];
        }
        if (sum == 0) count++;
        sum = 0;
    }
 
    for (int i = 0; i < ROW;i++) {
        sum += board[i][i];
    }
    if (sum == 0) count++;
    sum = 0;
 
    for (int i = 0; i < ROW; i++) {
        sum += board[i][(ROW-1- i];
    }
    if (sum == 0) count++;
    sum = 0;
 
    return count;
}
 
int main() {
    int board[ROW][COL];
    int num;
    int count = 0;
    int keepCnt;
    BOOL isChecked = FALSE;
    BOOL isBingo = FALSE;
 
    for (int i = 0; i < ROW;i++) {
        for (int j = 0; j < COL;j++) {
 
            scanf("%d",&board[i][j]);
        }
    }
 
    for (int k = 0; k < ROW*COL; k++) {
 
        scanf("%d"&num);
        count++;
 
        isChecked = FALSE;
        for (int i = 0; i < ROW; i++) {
            for (int j = 0; j < COL; j++) {
                if (board[i][j] == num) {
                    board[i][j] = CHECK;
                    isChecked = TRUE;
                    break;
                }
            }
            if (isChecked) break;
        }
 
        if (!isBingo && checkBingo(board) >= 3) {
            isBingo = TRUE;
            keepCnt = count;
        }
    }
 
    printf("%d\n", keepCnt);
 
    return 0;
}
cs


'백준' 카테고리의 다른 글

10158)개미  (0) 2019.02.14
10159)저울  (0) 2019.02.13
2607)비슷한 단어  (0) 2019.02.12
2606)바이러스  (0) 2019.02.12
2605)줄 세우기  (0) 2019.02.11