본문 바로가기
Algorithm Study/BaekJoon (JAVA)

백준 2578_빙고_JAVA

by 창브로 2024. 4. 18.
728x90

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

 

2578번: 빙고

첫째 줄부터 다섯째 줄까지 빙고판에 쓰여진 수가 가장 위 가로줄부터 차례대로 한 줄에 다섯 개씩 빈 칸을 사이에 두고 주어진다. 여섯째 줄부터 열째 줄까지 사회자가 부르는 수가 차례대로

www.acmicpc.net

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

public class Main {
    static int[][] bingo = new int[5][5];
    static int count = 0;

    public static void main(String args[]) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        for (int i = 0; i < 5; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            for (int j = 0; j < 5; j++) {
                bingo[i][j] = Integer.parseInt(st.nextToken());
            }
        }

        A:
        for (int i = 0; i < 5; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            for (int j = 0; j < 5; j++) {
                count++;
                int num = Integer.parseInt(st.nextToken());
                findNum(num); // 빙고판에서 숫자를 찾아 0으로 바꿔주는 함수
                if (findBingo()) {
                    break A;
                }
            }
        }


        System.out.print(count);
    }

    private static void findNum(int n) {
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 5; j++) {
                if (bingo[i][j] == n) {
                    bingo[i][j] = 0;
                    return;
                }
            }
        }
    }

    private static boolean findBingo() {
        int bingoCount = 0;

        // 가로 검사
        for (int i = 0; i < 5; i++) {
            int count = 0;
            for (int j = 0; j < 5; j++) {
                if (bingo[i][j] == 0) {
                    count++;
                }
            }
            if (count == 5) {
                bingoCount++;
            }
        }

        // 세로 검사
        for (int i = 0; i < 5; i++) {
            int count = 0;
            for (int j = 0; j < 5; j++) {
                if (bingo[j][i] == 0) {
                    count++;
                }
            }
            if (count == 5) {
                bingoCount++;
            }
        }


        int count = 0;
        // 왼쪽에서 오른쪽으로 내려가는 대각선 검사
        for (int i = 0; i < 5; i++) {
            if (bingo[i][i] == 0) {
                count++;
            }
        }

        if (count == 5) {
            bingoCount++;
        }

        count = 0;

        // 오른쪽에서 왼쪽으로 내려가는 대각선 검사
        for (int i = 0; i < 5; i++) {
            if (bingo[i][4 - i] == 0) {
                count++;
            }
        }


        if (count == 5) {
            bingoCount++;
        }


        if (bingoCount >= 3) {
            return true;
        } else {
            return false;
        }
    }


}

회고 

- 알고리즘이 들어가지 않은 그냥 구현 문제였다.

- 헷갈리긴 했지만 하나하나 차근차근 구현하니 풀렸다.

- 구현 문제 더 풀어봐야겠다.