코딩테스트
백준 빙고(c++)
leeeehhjj
2024. 2. 17. 13:45
https://www.acmicpc.net/problem/2578
2578번: 빙고
첫째 줄부터 다섯째 줄까지 빙고판에 쓰여진 수가 가장 위 가로줄부터 차례대로 한 줄에 다섯 개씩 빈 칸을 사이에 두고 주어진다. 여섯째 줄부터 열째 줄까지 사회자가 부르는 수가 차례대로
www.acmicpc.net
#include <iostream>
#include <map>
using namespace std;
int A[5+10][5+10];
int B[25+10];
int R[5];
int C[5];
int side1;
int side2;
bool visitedR[5];
bool visitedC[5];
bool visitedSide1;
bool visitedSide2;
map<int, pair<int,int>> m;
void InputData(){
for (int i=0; i<5; i++){
for (int j=0; j<5; j++){
cin >> A[i][j];
m[A[i][j]] = make_pair(i,j);
}
}
for (int i=0; i<25; i++){
cin >> B[i];
}
}
int cnt = 0;
int solve() {
for(int i=0; i<25; i++) {
pair<int,int> p = m[B[i]];
R[p.first]++;
C[p.second]++;
if (p.first == p.second)
side1++;
if(p.first == (4-p.second)) {side2++;}
if(R[p.first] == 5 && !visitedR[p.first]) {cnt++; visitedR[p.first] = true;}
if(C[p.second] == 5 && !visitedC[p.second]) {cnt++; visitedC[p.second] = true;}
if(side1 == 5 && !visitedSide1) {cnt++; visitedSide1=true;}
if(side2 == 5 && !visitedSide2) {cnt++; visitedSide2 = true;}
if (cnt >= 3) return i+1;
}
}
int main(){
int ans = -1;
InputData();// 입력받는 부분
// 여기서부터 작성
ans = solve();
cout << ans << endl;// 출력하는 부분
return 0;
}