ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준] 2578. 빙고
    PS/Java 2022. 4. 1.

    빙고 게임은 다음과 같은 방식으로 이루어진다.

    먼저 아래와 같이 25개의 칸으로 이루어진 빙고판에 1부터 25까지 자연수를 한 칸에 하나씩 쓴다

    다음은 사회자가 부르는 수를 차례로 지워나간다. 예를 들어 5, 10, 7이 불렸다면 이 세 수를 지운 뒤 빙고판의 모습은 다음과 같다.

    차례로 수를 지워가다가 같은 가로줄, 세로줄 또는 대각선 위에 있는 5개의 모든 수가 지워지는 경우 그 줄에 선을 긋는다.

     

    이러한 선이 세 개 이상 그어지는 순간 "빙고"라고 외치는데, 가장 먼저 외치는 사람이 게임의 승자가 된다.

     

    철수는 친구들과 빙고 게임을 하고 있다. 철수가 빙고판에 쓴 수들과 사회자가 부르는 수의 순서가 주어질 때, 사회자가 몇 번째 수를 부른 후 철수가 "빙고"를 외치게 되는지를 출력하는 프로그램을 작성하시오.


    입력

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

    출력

    첫째 줄에 사회자가 몇 번째 수를 부른 후 철수가 "빙고"를 외치게 되는지 출력한다.


    예제 입력 1

    11 12 2 24 10
    16 1 13 3 25
    6 20 5 21 17
    19 4 8 14 9
    22 15 7 23 18
    5 10 7 16 2
    4 22 8 17 13
    3 18 1 6 25
    12 19 23 14 21
    11 24 9 20 15

    예제 출력 1

    15

    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.util.StringTokenizer;
    
    public class Main {
        public static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        public static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        public static boolean[] isBingo;
        public static int[] bingo;
        public static void main(String[] args) throws Exception {
            isBingo = new boolean[26];
            bingo = new int[26];
            for(int i = 0; i < 5; i++) {
                StringTokenizer st = new StringTokenizer(br.readLine());
                for(int j = 1; j <= 5; j++) {
                    bingo[Integer.parseInt(st.nextToken())] = (i * 5) + j;
                }
            }
    
            int res = 0;
            Loop1:
            for(int i = 0; i < 5; i++) {
                StringTokenizer st = new StringTokenizer(br.readLine());
                for(int j = 1; j <= 5; j++) {
                    isBingo[bingo[Integer.parseInt(st.nextToken())]] = true;
                    if(countBingo() >= 3) {
                        res = (i * 5) + j;
                        break Loop1;      
                    }
                }
            }
            bw.write(Integer.toString(res));
            br.close();
            bw.flush();
            bw.close();
        }
    
        public static int countBingo() {
            int cnt = 0;
            for(int i = 0; i <= 4; i++) {
                if(isBingo[(i * 5) + 1] && isBingo[(i * 5) + 2] && isBingo[(i * 5) + 3] && isBingo[(i * 5) + 4] && isBingo[(i * 5) + 5]) {
                    cnt++;
                }
                if(isBingo[(1 + i)] && isBingo[(1 + i) + 5] && isBingo[(1 + i) + 10] && isBingo[(1 + i) + 15] && isBingo[(1 + i) + 20]) {
                    cnt++;
                }
            }
            if(isBingo[1] && isBingo[7] && isBingo[13] && isBingo[19] && isBingo[25]) {
                cnt++;
            }
            if(isBingo[5] && isBingo[9] && isBingo[13] && isBingo[17] && isBingo[21]) {
                cnt++;
            }
            return cnt;
        }
    }

    'PS > Java' 카테고리의 다른 글

    [백준] 2178. 미로 탐색  (0) 2022.04.01
    [백준] 2947. 나무 조각  (0) 2022.04.01
    [백준] 7785. 회사에 있는 사람  (0) 2022.04.01
    [백준] 2693. N번째 큰 수  (0) 2022.04.01
    [백준] 10867. 중복 빼고 정렬하기  (0) 2022.04.01

    댓글

Designed by Tistory.