https://www.acmicpc.net/problem/2578
빙고 구현 문제
최초 3빙고가 되는 시점을 출력한다.
복잡도가 매우 널널해서 아무렇게나 구현해도 된다.
1. O(1)로 찾기 위해, 빙고판 대신 숫자별 r,c를 기록한다.
2. 매번 탐색하지 않기 위해, 세로,가로,양 대각선을 카운트한다. (빙고판 및 사회자가 부르는 숫자는 유일하므로 가능)
3. 부른 숫자의 r,c에 해당하는 카운트를 올리고, 5가 됐다면 빙고처리한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
class Main {
public static void main(String[] args) throws IOException {
int[][] pos = new int[26][2];
int[] r = new int[5];
int[] c = new int[5];
int diag1 = 0, diag2 = 0;
int bingo = 0;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
for (int i = 0; i < 5; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < 5; j++) {
int p = Integer.parseInt(st.nextToken());
pos[p][0] = i;
pos[p][1] = j;
}
}
for (int i = 0; i < 5; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < 5; j++) {
int cur = Integer.parseInt(st.nextToken());
int cr = pos[cur][0];
int cc = pos[cur][1];
// 세로, 가로, 대각선 체크
if(++r[cr] == 5) bingo++;
if(++c[cc] == 5) bingo++;
if(cr == cc && ++diag1 == 5) bingo++;
if(cr + cc == 4 && ++diag2 == 5) bingo++;
if(bingo > 2) {
System.out.println(i * 5 + j + 1);
return;
}
}
}
}
}
'[백준] PS > Java [실랜디]' 카테고리의 다른 글
[백준 2713] 규현이의 사랑을 담은 문자메시지 - JAVA (1) | 2025.04.28 |
---|---|
[백준 2716] 원숭이 매달기 - JAVA (0) | 2025.04.28 |
[백준 2002] 추월 - JAVA (0) | 2025.04.25 |
[백준 2210] 숫자판 점프 - JAVA (0) | 2025.04.25 |
[백준 2784] 가로 세로 퍼즐 - JAVA (0) | 2025.04.25 |