티스토리 뷰

문제 요약

빙고

문제 설명

  • 첫째 줄부터 다섯째 줄까지 빙고판에 쓰여진 수가 가장 위 가로줄부터 차례대로 한 줄에 다섯 개씩 빈 칸을 사이에 두고 주어진다.
  • 여섯째 줄부터 열째 줄까지 사회자가 부르는 수가 차례대로 한 줄에 다섯 개씩 빈 칸을 사이에 두고 주어진다.
  • 빙고판에 쓰여진 수와 사회자가 부르는 수는 각각 1부터 25까지의 수가 한 번씩 사용된다.
  • 첫째 줄에 사회자가 몇 번째 수를 부른 후 철수가 "빙고"를 외치게 되는지 출력한다.

함수 설명

  • solve : 사회가 부르는 수를 0으로 바꿔주는 함수
  • Bingo : table에 bingo 개수를 리턴해주는 함수

문제 해답


#include <iostream>

using namespace std;
const int SIZE = 5;
int table[SIZE][SIZE];

bool Bingo();
void solve(int d);
int main() {

    std::ios::sync_with_stdio(false);
    cin.tie(0);


    for (int i = 0; i < SIZE; i++) {
        for (int j = 0; j < SIZE; j++)
            cin >> table[i][j];
    }

    int sol = 0;
    for (int i = 0; i < SIZE * SIZE; i++) {
        int val; 
        cin >> val;
        solve(val);
        if (Bingo()) {
            cout << i + 1 << endl;
            break;
        }
    }
    return 0;
}

void solve(int d) {
    for (int i = 0; i < SIZE; i++) {
        for (int j = 0; j < SIZE; j++)
            if (d == table[i][j]) {
                table[i][j] = 0;
                break;
            }
    }
}

bool Bingo() {
    // row
    int count = 0;
    for (int i = 0; i < SIZE;i++) {
        int val = 0;

        for (int j = 0; j < SIZE; j++) {
            val += table[i][j];
        }

        if (val == 0) {
            count++;
        }
    }

    for (int i = 0; i < SIZE;i++) {
        int val = 0;
        for (int j = 0; j < SIZE; j++)
            val += table[j][i];
        if (val == 0)
            count++;
    }

    int val = 0;
    for (int i = 0; i < SIZE;i++) 
        val += table[i][i];
    if (val == 0)
        count++;


    val = 0;
    for (int i = 0; i < SIZE;i++) 
        val += table[0 + i][SIZE - 1 - i];
    if (val == 0)
        count++;

    if (count >= 3)
        return true;
    return false;
}
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함