BJ2578 빙고

·2022년 4월 17일
0

백준 알고리즘

목록 보기
6/34

https://www.acmicpc.net/problem/2578

빙고 게임을 진행하며, 3개 이상의 줄이 완성될 때 진행자가 부른 수를 출력하면 된다.

빙고 조건을 검사하는 함수만 잘 구현하면 된다.

package day0210;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

public class Bingo {
	static BufferedReader br;
	static StringTokenizer st;
	static int[][] map = new int[5][5];
	static boolean[][] check = new boolean[5][5];
	static boolean[] hor = new boolean[5]; // 가로
	static boolean[] ver = new boolean[5]; // 세로
	static boolean[] dia = new boolean[2]; // 대각

	static int countBingo() {
		checkBingo();
		int count = 0;
		for (int i = 0; i < 5; i++) {
			if (hor[i])
				count++;
		}
		for (int i = 0; i < 5; i++) {
			if (ver[i])
				count++;
		}
		for (int i = 0; i < 2; i++) {
			if (dia[i])
				count++;
		}
		return count;
	}

	static void checkBingo() {
		for (int j = 0; j < 5; j++) {
			if (!hor[j]) {
				hor[j] = true;
				for (int i = 0; i < 5; i++) {
					if (!check[j][i]) {
						hor[j] = false;
						break;
					}
				}
			}
		}
		for (int j = 0; j < 5; j++) {
			if (!ver[j]) {
				ver[j] = true;
				for (int i = 0; i < 5; i++) {
					if (!check[i][j]) {
						ver[j] = false;
						break;
					}
				}
			}
		}
		if (!dia[0]) {
			dia[0] = true;
			for (int i = 0; i < 5; i++) {
				if (!check[i][i]) {
					dia[0] = false;
					break;
				}
			}
		}
		if (!dia[1]) {
			dia[1] = true;
			for (int i = 0; i < 5; i++) {
				if (!check[i][4 - i]) {
					dia[1] = false;
					break;
				}
			}
		}
	}

	static void findNumber(int tmp) {
		for (int i = 0; i < 5; i++) {
			boolean found = false;
			for (int j = 0; j < 5; j++) {
				if (map[i][j] == tmp) {
					check[i][j] = true;
					found = true;
					break;
				}
			}
			if (found) { // 찾으면 탐색 멈춤.
				break;
			}
		}
	}

	public static void main(String[] args) throws Exception {
		br = new BufferedReader(new InputStreamReader(System.in));
		int answer = 0;
		for (int i = 0; i < 5; i++) {
			st = new StringTokenizer(br.readLine(), " ");
			for (int j = 0; j < 5; j++) {
				map[i][j] = Integer.parseInt(st.nextToken());
			}
		}

		for (int i = 0; i < 5; i++) {
			boolean found = false;
			st = new StringTokenizer(br.readLine(), " ");
			for (int j = 0; j < 5; j++) {
				int tmp = Integer.parseInt(st.nextToken());
				findNumber(tmp);
				if (countBingo() >= 3) {
					found = true;
					answer = i * 5 + j + 1;
					break;
				}
			}
			if(found) break;
		}

		System.out.println(answer);

	}
}
profile
SSAFY 7기

0개의 댓글