728x90
https://www.acmicpc.net/problem/2578
문제 요약
- 5x5칸의 빙고판에 1부터 25까지의 자연수를 한 칸에 하나씩 쓴다..
- 사회자가 부르는 수를 차례로 지운다.
- 같은 가로줄, 세로줄, 대각선 위에 있는 5개의 모든 수가 지워지는 경우 그 줄에 선을 긋는다.
- 선이 세 개 이상 그어지는 순간 "빙고"라고 외치며, 가장 먼저 외치는 사람이 승리한다.
- 철수가 빙고판에 쓴 수들과 사회자가 부르는 수의 순서가 주어질 때, 사회자가 몇 번째 수를 부른 후 철수가 "빙고"를 외치게 되는지를 출력하는 프로그램을 작성하시오.
입력과 출력
제출 답안
#include <iostream>
#include<list>
using namespace std;
int bingo[5][5];
int answer[25];
int collect[10] = { 0,0,0,0,0,0,0,0,0,0 };//지워진 표
int result = 0;
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int row = 0;
int col = 0;
//빙고판 입력 받기
for (int i = 0; i < 25; i++) {
row = i / 5;
col = i % 5;
cin >> bingo[row][col];
}
//사회자가 부르는 수 입력
for (int i = 0; i < 25; i++) {
cin >> answer[i];
}
row = 0;
int line = 0;
int diag1 = 0, diag2 = 0;
int index = 0;
for (int i = 0; i < 25; i++) {
row = i / 5;
col = i % 5;
if (bingo[row][col] == answer[index]) {
result++;//횟수 증가
if (row == col) diag1++;//대각선 검사
if ((row + col) == 4) diag2++;//대각선 검사
collect[row]++;
collect[col + 5]++;
if (collect[row] == 5) {
collect[row] = 0;
line++;
}
if (collect[col + 5] == 5) {
collect[col + 5] = 0;
line++;
}
if (diag1 == 5) {
diag1 = 0;
line++;
}
if (diag2 == 5) {
diag2 = 0;
line++;
}
if (line >= 3) {
cout << result;
return 0;//빙고!
}
index++;
i = -1;
continue;
}
}
return 0;
}
728x90
'공부 > BAEKJOON' 카테고리의 다른 글
[C++] 백준 14503번 : 로봇 청소기 (1) | 2025.06.05 |
---|---|
[C++] 백준 11660번: 구간 합 구하기5 (0) | 2025.01.14 |
[C++] 백준 11659번: 구간 합 구하기4 (0) | 2025.01.12 |
[C++] 백준 1546: 평균 (1) | 2025.01.11 |
[C++] 백준 11720: 숫자의 합 (0) | 2025.01.11 |