hwooo
BOJ (C/C++) 2578번: 빙고 본문
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;
}
'Study > Algorithm' 카테고리의 다른 글
| 프로그래머스 (C/C++) 12911 : 다음 큰 숫자 (0) | 2023.06.23 |
|---|---|
| BOJ (C/C++) 1652번: 누울 자리를 찾아라 (0) | 2023.06.22 |
| BOJ (C/C++) 10973번: 이전 순열 (0) | 2023.06.20 |
| BOJ (C/C++) 17413번: 단어 뒤집기 2 (0) | 2023.06.19 |
| BOJ (C/C++) 14503번: 로봇 청소기 (0) | 2023.06.16 |