[JAVA] 백준 2578 빙고
2022. 8. 4.
반응형

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

 

2578번: 빙고

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

www.acmicpc.net

 

1. 서론

 

배열을 가지고 노는.... 그다지 어렵지 않은 문제다.

 

2. 문제 풀이

 

값이 적힌 2차원 배열이 주어지고 사회자가 배열에 적힌 번호를 부르는 순서가 주어진다.

부른 값을 지우고 가로, 세로, 대각선으로 일직선이 되면 이걸 빙고라고 하는데 3 빙고가 나왔을 때 사회자가 몇 번째 값을 불렀는지를 출력하는 문제이다.

 

입력이 주어지는데 나는 빙고판은 2차원 배열로 받고 사회자가 부른 순서는 1차원 배열로 받았다.

그래서 그 1차원 배열을 돌면서 부르는 값을 또다른 2차원 배열을 만들어서 체크해줬다.

그리고 매 순서에 가로, 세로, 대각선을 돌면서 지워진 값이 5개가 되는지 카운트해서 빙고인지 아닌지 판별했다.

 

3. 코드 설명

 

import java.util.*;

public class Main {

	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		
		int[][] a = new int[5][5];
		for (int i = 0; i < 5; i++)
			for (int j = 0; j < 5; j++)
				a[i][j] = s.nextInt();
		
		int[] x = new int[25];
		for (int i = 0; i < 25; i++) 
			x[i] = s.nextInt();
		
		int[][] check = new int[5][5];
		for (int i = 0; i < 5; i++)
			Arrays.fill(check[i], 0);
		
		for (int k = 0; k < 25; k++) {
			for (int i = 0; i < 5; i++)
				for (int j = 0; j < 5; j++)
					if (x[k] == a[i][j])
						check[i][j] = 1;
			
			int f = 0;
			for (int i = 0; i < 5; i++) { //가로
				int cnt = 0;
				for (int j = 0; j < 5; j++) {
					if (check[i][j] == 1)
						cnt++;
				}
				if (cnt == 5) 
					f++;
			}
			
			for (int i = 0; i < 5; i++) { //세로
				int cnt = 0;
				for (int j = 0; j < 5; j++) {
					if (check[j][i] == 1)
						cnt++;
				}
				if (cnt == 5) 
					f++;
			}
			
			int cnt = 0;
			for (int i = 0; i < 5; i++) { //대각선1
				for (int j = 0; j < 5; j++) {
					if (i == j && check[i][j] == 1)
						cnt++;
				}
				if (cnt == 5)
					f++;
			}
			
			cnt = 0;
			for (int i = 0; i < 5; i++) { //대각선2
				for (int j = 0; j < 5; j++) {
					if (i + j == 4 && check[i][j] == 1)
						cnt++;
				}
				if (cnt == 5) 
					f++;
			}
				
			if (f >= 3) {
				System.out.println(k + 1);
				break;
			}
		}
	}
}

 

변수 f로 빙고의 개수를 카운트 한다. check는 빙고를 체크하는 배열로 0으로 초기화하고 사회자에게 불려지면 1로 값을 바꿔준다.

그리고 가로, 세로, 대각선 두개를 돌면서 빙고를 카운트한다.

 

 

 

 

 

반응형
myoskin