크게 어렵지 않은 구현 문제입니다.
마찬가지로 하라는 대로 하면 됩니당.
import java.io.*;
import java.util.*;
public class Main {
static class Dir{
int y, x;
Dir(int y, int x){
this.y = y; this.x = x;
}
}
static Map<Integer, Dir> board = new HashMap<>();
static boolean[][] checked = new boolean[5][5];
public static int checkBingos() {
int cnt = 0;
int left = 0, right = 0;
for(int i = 0; i < 5; i++) {
int r = 0, c = 0;
if(checked[i][i]) right++;
if(checked[i][4 - i]) left++;
for(int j = 0; j < 5; j++) {
if(checked[i][j]) r++;
if(checked[j][i]) c++;
}
if(r == 5) cnt++;
if(c == 5) cnt++;
}
if(left == 5) cnt++;
if(right == 5) cnt++;
return cnt;
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
List<Integer> nums = new ArrayList<>();
int answer = 0;
for(int i = 0; i < 5; i++) {
st = new StringTokenizer(br.readLine(), " ");
for(int j = 0; j < 5; j++) {
board.put(Integer.parseInt(st.nextToken()), new Dir(i, j));
}
}
for(int i = 0; i < 5; i++) {
st = new StringTokenizer(br.readLine(), " ");
for(int j = 0; j < 5; j++) {
nums.add(Integer.parseInt(st.nextToken()));
}
}
for(int n : nums) {
answer++;
Dir pos = board.get(n);
checked[pos.y][pos.x] = true;
if(checkBingos() >= 3) break;
}
System.out.println(answer);
}
}
사회자가 번호를 불렀을 때 그 번호의 위치를 바로 찾기 위해서 Map<Integer, Dir> 로 빙고판을 만들어 줍시다.
25개가 다 불리기 전에 무조건 빙고를 세 개 이상 만들 수 있을테지만 철수는 착해서 다 기다려줍니다.
암튼 입력 받은대로 2차원 boolean 배열 checked 에 체크를 해줍시다. 체크할 때마다 빙고가 세 개 완성됐는지 체크해주면서 반복문을 돌리면 됩니다.
한칸 체크했을 때 바로 빙고가 두 개 이상 만들어 질 수 있음에 유의합시다!!
감사합니다 ㅎ.ㅎ
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ-15683][완전 탐색/시뮬레이션] 감시 - Java (0) | 2020.09.21 |
---|---|
[BOJ-14891][시뮬레이션] 톱니바퀴 - Java (0) | 2020.09.21 |
[BOJ-2605][구현] 줄 세우기 - Java (0) | 2020.09.19 |
[BOJ-2309][완전 탐색/조합] 일곱 난쟁이 - Java (0) | 2020.09.19 |
[BOJ-17472][완전 탐색/MST] 다리 만들기 2 - Java (0) | 2020.09.04 |