※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 2578번 문제인 빙고이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/2578
2578번: 빙고
첫째 줄부터 다섯째 줄까지 빙고판에 쓰여진 수가 가장 위 가로줄부터 차례대로 한 줄에 다섯 개씩 빈 칸을 사이에 두고 주어진다. 여섯째 줄부터 열째 줄까지 사회자가 부르는 수가 차례대로
www.acmicpc.net
새로운 수를 사회자가 부를 때마다 (1) 빙고판에서 해당 수를 지우고 (2) 현재 지워진 수로 3개의 줄이 만들어졌는지를 체크하는 것을 시뮬레이션해 문제를 해결하자.
이 문제의 경우 칸의 수가 충분히 적으므로 비효율적이더라도 단순하고 확실한 구현을 사용해 문제를 편하게 해결해도 좋다.
아래는 제출한 소스코드이다.
#include <iostream>
using namespace std;
int board[5][5];
int ans;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
for (int r = 0; r < 5; r++) {
for (int c = 0; c < 5; c++) cin >> board[r][c];
}
while (1) {
ans++;
int x; cin >> x;
for (int r = 0; r < 5; r++) {
for (int c = 0; c < 5; c++) {
if (board[r][c] == x) board[r][c] = 0;
}
}
int cnt = 0;
for (int r = 0; r < 5; r++) {
bool chk = 1;
for (int c = 0; c < 5; c++) {
if (board[r][c]) chk = 0;
}
if (chk) cnt++;
}
for (int c = 0; c < 5; c++) {
bool chk = 1;
for (int r = 0; r < 5; r++) {
if (board[r][c]) chk = 0;
}
if (chk) cnt++;
}
bool chk = 1;
for (int r = 0; r < 5; r++) {
if (board[r][r]) chk = 0;
}
if (chk) cnt++;
chk = 1;
for (int r = 0; r < 5; r++) {
if (board[r][4 - r]) chk = 0;
}
if (chk) cnt++;
if (cnt > 2) {
cout << ans << '\n';
break;
}
}
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 29542 // C++] Wipe it! (1) | 2024.02.14 |
---|---|
[BOJ 2567 // C++] 색종이 - 2 (0) | 2024.02.13 |
[BOJ 29131 // C++] Хобби (0) | 2024.02.11 |
[BOJ 6123 // C++] Oh Those Fads (1) | 2024.02.10 |
[BOJ 29130 // C++] Стеллаж с книгами (0) | 2024.02.09 |