#include <iostream>
using namespace std;
/* <문제해결>
나는 빙고판에 숫자를 써넣고, 사회자가 숫자를 부를때 마다 빙고판에 쓰인
숫자를 0으로 바꾸고 빙고가 완성되었는지 확인하는 식으로 문제를 해결했다.
먼저, 빙고판 숫자를 0으로 수정하는 함수 FixBingo()를 작성했다.
그 다음, 빙고가 완성되었는지 확인하는 함수 CheckBingo()를 작성했다.
빙고는 가로한줄 또는 세로한줄 또는 대각선한줄이 지워지는 경우가 3개 이상일때이다.
따라서,
1. 가로검사
2. 세로검사
3. 대각선검사 - 대각선 검사는 좌측상단부터 우측하단까지 지워지는 한줄,
좌측하단부터 우측상단까지 지워지는 한줄이 있다.
위 3가지를 CheckBingo 함수에 작성했다.
*/
int bingo[5][5];
// 빙고판을 돌며 해당숫자가 있는칸을 0으로 만들기
void FixBingo(int target)
{
for (int i = 0;i < 5;i++)
{
for (int j = 0;j < 5;j++)
{
if (bingo[i][j] == target)
{
bingo[i][j] = 0;
}
}
}
}
// 빙고가 완성됐는 지 확인(0 : 빙고, 1 : 빙고x)
int CheckBingo()
{
int bingoCnt = 0; // 완성된 빙고 수
// 1. 가로빙고 체크
for (int i = 0;i < 5;i++)
{
bool isBingo = true;
for (int j = 0;j < 5;j++)
{
if (bingo[i][j] != 0)
{
isBingo = false;
break;
}
}
if (isBingo)
bingoCnt++;
}
// 2. 세로빙고
for (int i = 0;i < 5;i++)
{
bool isBingo = true;
for (int j = 0;j < 5;j++)
{
if (bingo[j][i] != 0)
{
isBingo = false;
break;
}
}
if (isBingo)
bingoCnt++;
}
bool isBingo = true;
// 3. 대각선빙고 - 1 ( [0,0] [1,1] [2,2] [3,3] [4,4] [5,5] )
for (int i = 0;i < 5;i++)
{
if (bingo[i][i] != 0)
{
isBingo = false;
break;
}
}
if (isBingo)
bingoCnt++;
isBingo = true;
// 4. 대각선빙고 - 2 ( [4,0] [3,1] [2,2] [1,3] [0,4] )
for (int i = 4;i >= 0;i--)
{
if (bingo[i][4-i] != 0)
{
isBingo = false;
break;
}
}
if (isBingo)
bingoCnt++;
// 완성된 빙고가 3개이상일 경우
if (bingoCnt >= 3)
return 0;
else
return 1;
}
int main()
{
// 빙고판 입력
for (int i = 0;i < 5;i++)
{
for (int j = 0;j < 5;j++)
{
cin >> bingo[i][j];
}
}
int cnt = 0; // 최종 답
// 숫자 하나씩 입력
for (int i = 0;i < 5;i++)
{
for (int j = 0;j < 5;j++)
{
cnt++;
int temp;
cin >> temp;
FixBingo(temp);
if (CheckBingo() == 0)
{
cout << cnt;
exit(0);
}
}
}
}
댓글남기기