Notice
Recent Posts
Recent Comments
Link
«   2025/12   »
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 31
Archives
Today
Total
관리 메뉴

hwooo

BOJ (C/C++) 2578번: 빙고 본문

Study/Algorithm

BOJ (C/C++) 2578번: 빙고

hwooo 2023. 6. 22. 02:22

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

 

2578번: 빙고

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

www.acmicpc.net


풀이

빙고판을 입력 받고, 숫자가 하나씩 들어올 때마다 해당 위치를 체크한 후 그 위치가 채워짐으로써 해당 줄이 다 채워짐을 확인했다.

이 때 가로, 세로는 모두 확인했고, 대각선 빙고가 만들어질 수 있는 위치의 경우는 해당 케이스를 추가로 확인했다.


코드

#include <stdio.h>
int bingo[5][5], line = 0;
bool check[5][5];

void Is_bingo(int x, int y) {
	int i;

	// 가로
	for (i = 0; i < 5; i++) {
		if (!check[x][i]) break;
	}
	if (i == 5) line++;

	// 세로
	for (i = 0; i < 5; i++) {
		if (!check[i][y]) break;
	}
	if (i == 5) line++;

	// 왼쪽 대각선 방향 
	if (x == y) {
		for (i = 0; i < 5; i++) {
			if (!check[i][i]) break;
		}
		if (i == 5) line++;
	}

	// 오른쪽 대각선 방향 /
	if (x == (4 - y)) {
		for (i = 0; i < 5; i++) {
			if (!check[i][4 - i]) break;
		}
		if (i == 5) line++;
	}	
}

void Checking(int num) {
	for (int i = 0; i < 5; i++) {
		for (int j = 0; j < 5; j++) {
			if (bingo[i][j] == num) {
				check[i][j] = true;
				Is_bingo(i, j);
				return;
			}
		}
	}
}

int main() {
	int num, i;

	// input
	for (int i = 0; i < 5; i++) {
		for (int j = 0; j < 5; j++)
			scanf("%d", &bingo[i][j]);
	}

	for (i = 1;; i++) {
		scanf("%d", &num);
		Checking(num);
		if (line >= 3) break;
	}

	printf("%d", i);
	return 0;
}