코딩테스트
백준 빙고(c++)
leeeehhjj
2024. 2. 17. 13:45
https://www.acmicpc.net/problem/2578
#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;
}