티스토리 뷰

PS/BOJ

[구현] 2578번 빙고

GiHoo 2023. 6. 19. 11:58

 

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

 

2578번: 빙고

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

www.acmicpc.net

 


문제

 

 


접근 방법

 

처음 문제를 보고 단순히 "for문 여러번 돌려야겠는데?" 라고 생각했습니다.

이 생각을 하고 다른 간결한 풀이가 있는지 생각해봤지만 떠오르는 것이 없었고,

자신의 빙고판과 사회자가 부를 숫자를 배열에 입력받은 후

for문을 돌려 수를 확인하고, 수를 확인한 후에 빙고가 있는지 확인하는 과정을 구현하였습니다.

 

 


코드

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

class Main {
    private static int[][] matrix = new int[5][5]; //나의 빙고판
    private static int[][] sequence = new int[5][5]; // 사회자가 순서대로 부를 수
    static int N = 5;

    public static int bingo() {
        int answer = 0;
        for(int i=0; i<N; i++) {
            int cnt = 0;
            for(int j=0; j<N; j++) {
                if(matrix[i][j]==0) cnt++;
            }
            if(cnt==5) answer++;
        } //가로

        for(int i=0; i<N; i++) {
            int cnt = 0;
            for(int j=0; j<N; j++) {
                if(matrix[j][i]==0) cnt++;
            }
            if(cnt==5) answer++;
        } // 세로

        int cnt = 0;
        for(int i=0; i<N; i++) {
            if(matrix[i][i]==0) cnt++;
            if(cnt==5) answer++;
        } // 우하향 대각선

        cnt = 0;
        for(int i=0; i<N; i++) {
            if(matrix[N-1-i][i]==0) cnt++;
            if(cnt==5) answer++;
        } // 우상향 대각선

        return answer;
    }


    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        for(int i=0; i<N; i++) {
            st = new StringTokenizer(br.readLine());
            for(int j=0; j<N; j++) {
                matrix[i][j] = Integer.parseInt(st.nextToken());
            }
        }  // 빙고판 입력

        for(int i=0; i<N; i++) {
            st = new StringTokenizer(br.readLine());
            for(int j=0; j<N; j++) {
                sequence[i][j] = Integer.parseInt(st.nextToken());
            }
        }  // 사회자 부르는 수 입력

        int cnt = 0;
        for(int i=0; i<N; i++) {
            for(int j=0; j<N; j++) {
                cnt++;
                int call = sequence[i][j];
                for(int k = 0; k<N; k++) {
                    for(int l = 0; l<N; l++) {
                        if(matrix[k][l]==call) matrix[k][l] = 0;
                    }
                } // x표시 하기 0으로
                if(bingo()>=3) {
                    System.out.println(cnt);
                    return;
                }
            }
        }
    }
}

 

공지사항
최근에 올라온 글
최근에 달린 댓글
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30