백준 12933 - 빙고

Updated:

Java

2578 번 - 빙고

문제

접근 방법

빙고를 만드는 구현 문제였다.

코드

import java.util.*;
import java.io.*;

public class Main {
	static int n, result;
	static int[][] board;
	static boolean[][] vis;
	static Set<String> bingos;
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    	StringTokenizer stk;

		board = new int[5][5];
		vis = new boolean[5][5];
		bingos = new HashSet<String>();
		for(int i = 0; i < 5; i++) {
			stk = new StringTokenizer(br.readLine());
			for(int j = 0; j < 5; j++) {
				board[i][j] = stoi(stk.nextToken());
			}
		}

		int count = 1;
		for(int i = 0; i < 5; i++) {
			stk = new StringTokenizer(br.readLine());
			for(int j = 0; j < 5; j++) {
				chkBoard(stoi(stk.nextToken()));
				if(chkBingo()) {
					System.out.println(count);
					br.close();
					return;
				}
				count++;
			}
		}

    	br.close();
	}

	static void chkBoard(int num) {
		for(int i = 0; i < 5; i++) {
			for(int j = 0; j < 5; j++) {
				if(board[i][j] == num) {
					vis[i][j] = true;
				}
			}
		}
	}

	static boolean chkBingo() {
		int bingoCnt = 0;
		// 가로 탐색
		next: for(int i = 0; i < 5; i++) {
			for(int j = 0; j < 5; j++) {
				if(!vis[i][j]) {
					continue next;
				}
			}
			// 한줄 빙고
			bingoCnt++;
		}
		// 세로 탐색
		next: for(int i = 0; i < 5; i++) {
			for(int j = 0; j < 5; j++) {
				if(!vis[j][i]) {
					continue next;
				}
			}
			// 한줄 빙고
			bingoCnt++;
		}
		// 대각선 탐색
		if(vis[0][0] && vis[1][1] && vis[2][2] && vis[3][3] && vis[4][4]) {
			bingoCnt++;
		}
		if(vis[0][4] && vis[1][3] && vis[2][2] && vis[3][1] && vis[4][0]) {
			bingoCnt++;
		}
		if(bingoCnt >= 3)
			return true;
		else
			return false;
	}

	static int stoi(String str) {
    	return Integer.parseInt(str);
    }
}

총평

후기

개선할 점