2 분 소요

Intro

image

image

image

문제해결 및 소스코드

#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);
			}
		}
	}
}
  • 빙고 3줄은 최소 13번의 숫자가 불린 후 완성될 수 있으므로, 이를 코드에 반영한다면
  • 좀 더 최적화시킬수도 있을것같다.

댓글남기기