코딩테스트/백준

[실4] 2578 - 빙고

ShovelingLife 2025. 2. 24. 22:32
#include <iostream>
#include <vector>
#include <map>

using namespace std;

#define MAX 5

int main()
{
	map<pair<int, int>, bool> board;
	map<int, pair<int, int>> pos;

	for (int y = 0; y < MAX; y++)
	{
		for (int x = 0; x < MAX; x++)
		{
			int n;
			cin >> n;
			pos[n] = { y,x };
			board[{y, x}] = false;
		}
	}
	for (int y = 0; y < 25; y++)
	{
		int n, cnt = 0, tmp = 0;
		cin >> n;
		board[pos[n]] = true;

		// 위에서 아래로
		for (int x = 0; x < MAX; x++)
			cnt += board[{0, x}] && board[{1, x}] && board[{2, x}] && board[{3, x}] && board[{4, x}];

		// 좌 우로
		for (int y = 0; y < MAX; y++)
			cnt += board[{y, 0}] && board[{y, 1}] && board[{y, 2}] && board[{y, 3}] && board[{y, 4}];

		// 대각선
		for (int i = 0; i < MAX; i++)
			tmp += board[{i, i}];

		cnt += (tmp == MAX);
		tmp = 0;

		for (int i = 0; i < MAX; i++)
			tmp += board[{4 - i, i}];

		cnt += (tmp == MAX);

		if (cnt >= 3)
		{
			cout << y + 1;
			return 0;
		}
	}
}