[BOJ/2578/C++] 빙고

SHark·2023년 3월 21일
0

BOJ

목록 보기
26/59

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

문제

빙고 게임은 다음과 같은 방식으로 이루어진다.
먼저 아래와 같이 25개의 칸으로 이루어진 빙고판에 1부터 25까지 자연수를 한 칸에 하나씩 쓴다.
우리가 아는 빙고입니다. 3줄되면 빙고!

조건

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

풀이

빙고를 구현하면 됩니다. 3줄이 확인되면 그 순간 빙고가 완성되기 때문에 숫자를 부를 때매번 빙고가 완성되었는지 안되었는지 확인 해야합니다.

#include <bits/stdc++.h>
using namespace std;

int bingoBoard[5][5];

void makeBingoBoard()
{
  for (int i = 0; i < 5; i++)
    for (int j = 0; j < 5; j++)
    {
      cin >> bingoBoard[i][j];
    }
}

bool IsBingo()
{
  // 가로줄 검사
  int cnt = 0;

  for (int i = 0; i < 5; i++)
  {
    int sum = 0;
    for (int j = 0; j < 5; j++)
      sum += bingoBoard[i][j];
    if (sum == 0)
      cnt++;
  }
  // 세로줄 검사
  for (int i = 0; i < 5; i++)
  {
    int sum = 0;
    for (int j = 0; j < 5; j++)
    {
      sum += bingoBoard[j][i];
    }
    if (sum == 0)
      cnt++;
  }
  // 대각선 검사
  int sum = 0;
  for (int i = 0; i < 5; i++)
    sum += bingoBoard[i][i];
  if (sum == 0)
    cnt++;
  sum = 0;
  for (int i = 0; i < 5; i++)
  {
    sum += bingoBoard[4 - i][i];
  }
  if (sum == 0)
    cnt++;

  if (cnt >= 3)
    return true;
  else
    return false;
}
void FindNumber(int num)
{
  for (int i = 0; i < 5; i++)
  {
    for (int j = 0; j < 5; j++)
    {
      if (num == bingoBoard[i][j])
      {
        bingoBoard[i][j] = 0;
        return;
      }
    }
  }
}

int main()
{
  makeBingoBoard();
  int N;
  for (int i = 0; i < 25; i++)
  {
    cin >> N;
    FindNumber(N);
    if (IsBingo())
    {
      cout << i + 1 << '\n';
      break;
    }
  }

  return 0;
}

0개의 댓글