728x90
https://www.acmicpc.net/problem/2578
2578번: 빙고
첫째 줄부터 다섯째 줄까지 빙고판에 쓰여진 수가 가장 위 가로줄부터 차례대로 한 줄에 다섯 개씩 빈 칸을 사이에 두고 주어진다. 여섯째 줄부터 열째 줄까지 사회자가 부르는 수가 차례대로
www.acmicpc.net
25개의 칸으로 이루어진 빙고칸. 1~25 자연수를 한 칸에 하나씩
가로, 세로, 대각선 위에 있는 5개의 모든 수가 지워지면 그 줄에 선을 긋는다
선이 세 개 이상 그어지면 빙고
가장 먼저 빙고면 게임의 승자
사회자가 부르는 수가 차례대로 한 줄에 다섯개씩 빈 칸을 사이에 두고 주어진다.
사회자가 몇 번째 수를 부른 후 철수가 "빙고"를 외치게 되는지 출력
#include <iostream>
using namespace std;
int arr[26][26], ans=0;
int bingGo(){
int bg = 0;
//가로
for(int i=1; i<=5; i++){
int cnt = 0;
for(int j=1; j<=5; j++){
if(arr[i][j] == 0) cnt++;
}
if(cnt == 5) bg++;
}
//세로
for(int j=1; j<=5; j++){
int cnt = 0;
for(int i=1; i<=5; i++){
if(arr[i][j] == 0) cnt++;
}
if(cnt == 5) bg++;
}
//대각선(\)
int cnt = 0;
for(int i=1; i<=5; i++){
if(arr[i][i] == 0) cnt++;
}
if(cnt == 5) bg++;
//대각선(/)
cnt = 0;
for(int i=1; i<=5; i++){
if(arr[i][6-i] == 0) cnt++;
}
if(cnt == 5) bg++;
return bg;
}
int main(){
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
for(int i=1; i<=5; i++) for(int j=1; j<=5; j++) cin >> arr[i][j];
for(int i=1; i<=25; i++){
int num;
cin >> num;
ans++;
for(int j=1; j<=5; j++){
for(int k=1; k<=5; k++){
if(num == arr[j][k]) {
arr[j][k] = 0;
if(bingGo() >= 3) {
cout << ans << '\n';
return 0;
}
}
}
}
}
return 0;
}
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[백준/c++] 19637번: IF문 좀 대신 써줘 (0) | 2022.07.07 |
---|---|
[백준/c++] 1913번: 달팽이 (0) | 2022.07.06 |
[백준/c++] 14467번: 소가 길을 건너간 이유 1 (0) | 2022.07.06 |
[백준/c++] 21918번: 전구 (0) | 2022.05.30 |
[백준/c++] 5597번: 과제 안 내신 분..? (0) | 2022.05.30 |