다희의 코딩 성장일기

[백준] 2578. 빙고 (자바 JAVA) 본문

Algorithm/백준 BOJ

[백준] 2578. 빙고 (자바 JAVA)

ilmiodiario 2021. 10. 6. 13:48

[ 문제 ]  [백준] 2578. 빙고 (자바 JAVA)

 

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

 

2578번: 빙고

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

www.acmicpc.net


# 접근 방법 및 풀이 

 

  • 구현 문제다. 실버 5인데 실버5 보다는 실버3같은? 문제다.
  • 5X5 map 크기에 입력을 받아 숫자를 담고, 사회자가 부르는 숫자대로 빙고를 체크해야한다.
  • 사회자가 부르는 번호가 map의 어디 좌표 (i, j)에 있는지 알기 위해 HashMap을 이용해서 담았다. key는 번호고, value는 Point로 i,j를 담는다.
  • 5X5 크기의 visit배열을 생성해 사회자가 부르는 번호의 i, j에 true 체크를 해준다.
  • 문제에서 3줄 이상되어야 빙고를 외칠 수 있으므로, 사회자가 10번 이상 번호를 불렀을 경우 check()메소드로 빙고인지 체크해준다. 
  • 자세한건 코드참조 

# 주의할 점 

 

  • 딱히 없음

 

JAVA 코드
package Silver;

import java.awt.Point;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.StringTokenizer;

public class bj2578_빙고 {
	static int map[][];
	static boolean visit[][];
	public static void main(String[] args) throws IOException {
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		map = new int[5][5];
		visit = new boolean[5][5];
		HashMap<Integer, Point> hash = new HashMap<Integer, Point>();
		for (int i = 0; i < 5; i++) {
			StringTokenizer st = new StringTokenizer(in.readLine());
			for (int j = 0; j < 5; j++) {
				map[i][j] = Integer.parseInt(st.nextToken());
				hash.put(map[i][j],new Point(i, j));
			}
		}
		int cnt = 0;
		int ans = 0;
		boolean flag = false;
		for (int i = 0; i < 5; i++) {
			StringTokenizer st = new StringTokenizer(in.readLine());
			for (int j = 0; j < 5; j++) {
				cnt++;
				int num = Integer.parseInt(st.nextToken());
				Point p = hash.get(num);
				visit[p.x][p.y] = true;
				if(!flag && cnt >= 10) {
					flag = check();
					ans = cnt;
				}
			}
		}
		System.out.println(ans);	
	}
	private static boolean check() {
		int cnt = 0;
		for (int i = 0; i < 5; i++) {
			int w = 0;
			int l = 0;
			for (int j = 0; j < 5; j++) {
				if(visit[i][j])
					w++;
				if(visit[j][i])
					l++;
			}
			if(w == 5)
				cnt++;
			if(l == 5)
				cnt++;
		}
		if(visit[0][0] && visit[1][1] && visit[2][2] && visit[3][3] && visit[4][4])
			cnt++;
		if(visit[0][4] && visit[1][3] && visit[2][2] && visit[3][1] && visit[4][0])
			cnt++;	
		if(cnt >= 3)
			return true;
		return false;	
	}
}

 

 

REVIEW

Comments