자르비 왕국
[백준] 2578 빙고 - JAVA 본문
1. 문제 유형 : 구현
2. 시간 복잡도 : O(1) (원래는 O(N^4)인데, N이 5로 한정되어있음)
처음에 백준 채점에서 틀렸습니다를 받았는데, 이유는 빙고 줄 수가 3일 때에만 답을 출력하도록 하였기 때문이다. 빙고줄이 2에서 바로 4로 점프할 수 있기 때문에 3이상으로 변경하여야 한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
int[][] map = new int[5][5];
StringTokenizer st = null;
for (int i = 0; i < 5; i++) {
st = new StringTokenizer(in.readLine());
for (int j = 0; j < 5; j++) {
map[i][j] = Integer.parseInt(st.nextToken());
}
}
int answer = 0;
for (int i = 0; i < 5; i++) {
st = new StringTokenizer(in.readLine());
for (int j = 0; j < 5; j++) {
int num = Integer.parseInt(st.nextToken());
check(map, num);
answer++;
if(bingo(map) >= 3) {
System.out.println(answer);
return;
}
}
}
}
public static void check(int[][] map, int num) {
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if(map[i][j] == num) {
map[i][j] = -1;
return;
}
}
}
}
public static int bingo(int[][] map) {
int cnt = 0;
// 상단
for (int i = 0; i < 5; i++) {
if(map[0][i] == -1) {
// 하단 탐색
int idx = 1;
while(idx < 5 && map[idx][i] == -1) { idx++; };
if(idx == 5) cnt++;
if(i==0) {
// 우하향 대각선
idx = 1;
while(idx < 5 && map[idx][idx] == -1) {idx++;};
if(idx == 5) cnt++;
}
if(i==4) {
// 좌하향 대각선
idx = 1;
while(idx < 5 && map[idx][i-idx] == -1) {idx++; };
if(idx == 5) cnt++;
}
}
}
// 좌
for (int i = 0; i < 5; i++) {
if(map[i][0] == -1) {
// 좌 탐색
int idx = 1;
while(idx < 5 && map[i][idx] == -1) {idx++; };
if(idx == 5) cnt++;
}
}
return cnt;
}
}
'문제풀이' 카테고리의 다른 글
[백준] 1916 최소비용 구하기 - JAVA (0) | 2022.03.13 |
---|---|
[백준] 1700 멀티탭 스케줄링 - JAVA (0) | 2022.03.12 |
[BJ] 2564 경비원 - JAVA (0) | 2022.03.11 |
[BJ] 2491 수열 - JAVA (0) | 2022.03.11 |
[BJ] 2477 참외밭 - JAVA (0) | 2022.03.11 |