[백준(Baekjoon)][자바(java)] 2578 : 빙고

728x90

 

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

 

2578번: 빙고

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

www.acmicpc.net

 

문제 풀이

 

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader( new InputStreamReader(System.in));
		int n = 5, i, j; StringTokenizer st;
		HashMap<Integer, int[]> hm = new HashMap<>();
		for (i = 0; i < n; ++i) {
			st = new StringTokenizer(br.readLine());
			for (j = 0; j < n; ++j)
				hm.put(Integer.parseInt(st.nextToken()), new int[]{i, j});
		}
		int[] h = new int[n], v = new int[n], c = new int[2], p; int x, y, a = 0, b = 0, k;
		loop : 
		for (i = 0; i < n; ++i) {
			st = new StringTokenizer(br.readLine());
			for (j = 0; j < n; ++j) {
				a++;
				Integer key = Integer.parseInt(st.nextToken());
				p = hm.get(key);
				x = p[0]; y = p[1];
				h[x]++;
				v[y]++;
				if (x == y)			c[0]++;
				if (x == n - y - 1)	c[1]++;
				if (h[x] == n)	b++;
				if (v[y] == n)	b++;
				for (k = 0; k < 2; ++k) {
					if (c[k] == n)	{
						c[k] = -1;
						b++;
					}
				}
				if (b >= 3)
					break loop;
			}
		}
		System.out.println(a);
	}

}

 

 

반응형