백준 2578번 : 빙고 | 자바 풀이

박지윤·2022년 7월 16일
0

Algorithm_Implementation

목록 보기
8/16

[ Solution ]

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

public class Main {

    static int[][] bingo;
    static int count; // 빙고 개수 세는 변수

    public static void main(String[] args) throws IOException {

        Scanner sc = new Scanner(System.in);
        bingo = new int[5][5];
        count = 0;

        // 빙고판 입력
        for(int i = 0; i < 5; i++) {
            for(int j = 0; j < 5; j++) {
                bingo[i][j] = sc.nextInt();
            }
        }

        for(int k = 1; k <= 25; k++) {
            int num = sc.nextInt();

            for(int i = 0; i < 5; i++) {
                for(int j = 0; j < 5; j++) {
                    if(bingo[i][j] == num) // 사회자가 부른 숫자와 같다면 0으로 바꾸기
                        bingo[i][j] = 0;
                }
            }

            rCheck();
            cCheck();
            lrCheck();
            rlCheck();

            if(count >= 3) { // 3줄 이상 빙고이면 몇 번째 숫자인지 출력하고 종료
                System.out.println(k);
                break;
            }
            count = 0;
        }
    }

    //가로 체크
    public static void rCheck() {
        for(int i = 0; i < 5; i++) {
            int zeroCount = 0;
            for(int j = 0; j < 5; j++) {
                if(bingo[i][j] == 0)
                    zeroCount++;
            }
            if(zeroCount == 5)
                count++;
        }
    }

    // 세로 체크
    public static void cCheck() {
        for(int i = 0; i < 5; i++) {
            int zeroCount = 0;
            for(int j = 0; j < 5; j++) {
                if(bingo[j][i] == 0)
                    zeroCount++;
            }
            if(zeroCount == 5)
                count++;
        }
    }

    // 왼쪽에서 오른쪽으로 그어지는 대각선 체크
    public static void lrCheck() {
        int zeroCount = 0;
        for(int i = 0; i < 5; i++) {
            if(bingo[i][i] == 0)
                zeroCount++;
        }
        if(zeroCount == 5)
            count++;
    }

    // 오른쪽에서 왼쪽으로 그어지는 대각선 체크
    public static void rlCheck() {
        int zeroCount = 0;
        for(int i = 0; i < 5; i++) {
            if(bingo[i][4-i] == 0)
                zeroCount++;
        }
        if(zeroCount == 5)
            count++;
    }
}

가로, 세로, 대각선 2방향 체크에 대한 함수를 구현하는 것이 가장 중요한 문제라고 생각한다.
for문을 이용하여 bingo 배열의 인덱스에 적절히 접근하여야 한다.

0개의 댓글