경험의 기록

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

 

2578번: 빙고

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

www.acmicpc.net

 

 

풀이

0. 문제 해석

일반적인 구현 문제이다.

빙고판을 입력받고 사회자가 숫자 하나를 부를 때 마다 그 숫자를 지우고,

가로,세로,대각선 빙고가 몇개인지 체크하는 작업을 반복하다가

3개 이상 나오면 즉시 리턴하면 된다.

 

1. 빙고판 세팅

빙고판을 입력받고 숫자를 하나씩 입력받는다.

여기서 숫자를 지우는 bingo 메소드, 빙고가 몇개인지 확인하는 bingoCheck 메소드를 호출한다.

 

2. 숫자 지우기

부른 숫자를 나올 수 없는 수인 -1로 처리해준다.

이제 한 라인의 합이 -5 이면 빙고인 것으로 처리하면 된다.

 

3. 빙고 갯수 체크

빙고판을 탐색하면서 가로, 세로, 대각선의 합이 -5 인것을 각각 체크해준다.

해준 값이 3이 넘어가면 리턴한다.

 

4. 전체 코드

// [백준] 2578. 빙고 (Java)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
	static int [][] arr = new int[5][5]; // 빙고판
	static int num; // 숫자 부른 횟수
	static int count; // 빙고 갯수
	
    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++) {
    			arr[i][j] = Integer.parseInt(st.nextToken());
    		}
    	}
    	
    	// 숫자 하나씩 부름
    	for(int i = 0; i < 5; i++) {
    		StringTokenizer st = new StringTokenizer(br.readLine());
    		for(int j = 0; j < 5; j++) {
    			num++;
    			bingo(Integer.parseInt(st.nextToken()));
    			bingoCheck();
    			if(count >= 3) {
    				System.out.println(num);
    				return;
    			}
    		}
    	} 	
    }
    
    // 부른 숫자 지움 처리 (-1)
    public static void bingo(int n){
    	for(int i = 0; i < 5; i++) {
    		for(int j = 0; j < 5; j++) {
    			if(arr[i][j] == n) {
    				arr[i][j] = -1;
    			}
    		}
    	}
    }
    
    // 빙고 갯수 검사
    public static void bingoCheck() {
    	count = 0;
    	int row = 0; // 가로 빙고 
    	int col = 0; // 세로 빙고
    	int xy = 0; // 오른쪽 아래로 가는 대각선
    	int yx = 0; // 왼쪽 아래로 가는 대각선
    	int index = 0;
    	for(int i = 0; i < 5; i++) {
    		row = 0;
    		col = 0;
    		for(int j = 0; j < 5; j++) {			
    			row += arr[i][j];
    			col += arr[j][i];
    			
    			if(i == j) {
    				xy += arr[i][j];
    			}
    			if(i == index && j == 4 - index) {
    				yx += arr[i][j];
    				index++;
    			}
    		}
    		if(row == -5) {
    			count++;
    		}
    		if(col == -5) {
    			count++;
    		}
    		if(xy == -5) {
    			count++;
    		}
    		if(yx == -5) {
    			count++;
    		}
    	}
    }
}

 

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading