💡 문제
💬 입출력 예시
📌 풀이(소스코드)
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static final int SIZE = 5;
static int result = 0;
static int lineCnt = 0;
static int[][] board = new int[SIZE][SIZE];
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
for (int i = 0; i < SIZE; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
for (int j = 0; j < SIZE; j++) {
board[i][j] = Integer.parseInt(st.nextToken());
}
}
for (int i = 0; i < SIZE; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
for (int j = 0; j < SIZE; j++) {
result++;
int num = Integer.parseInt(st.nextToken());
for (int r = 0; r < SIZE; r++) {
for (int c = 0; c < SIZE; c++) {
if (board[r][c] == num) {
board[r][c] = -1;
}
}
}
checkRow();
checkCol();
checkLeftDiagonal();
checkRightDiagonal();
if (lineCnt >= 3) {
System.out.println(result);
return;
}
lineCnt = 0;
}
}
}
private static void checkRow() {
for (int i = 0; i < SIZE; i++) {
int count = 0;
for (int j = 0; j < SIZE; j++) {
if (board[i][j] == -1) {
count++;
}
}
if (count == SIZE) {
lineCnt++;
}
}
}
private static void checkCol() {
for (int i = 0; i < SIZE; i++) {
int count = 0;
for (int j = 0; j < SIZE; j++) {
if (board[j][i] == -1) {
count++;
}
}
if (count == SIZE) {
lineCnt++;
}
}
}
private static void checkLeftDiagonal() {
int count = 0;
for (int i = 0; i < SIZE; i++) {
if (board[i][i] == -1) {
count++;
}
if (count == SIZE) {
lineCnt++;
}
}
}
private static void checkRightDiagonal() {
int count = 0;
for (int i = 0; i < SIZE; i++) {
if (board[i][SIZE - i - 1] == -1) {
count++;
}
if (count == SIZE) {
lineCnt++;
}
}
}
}
📄 해설
접근
- 문제에서 주어진 조건에 따라, 가로, 세로, 대각선 5 칸을 확인해서 3줄 빙고가 되는지를 확인하면 되는 문제
- 문제 접근이나 풀이 과정 자체는 어렵지 않으나, 구현하는 과정이 조금 까다로울 수 있다. 작성자 얘기 맞다 😅
과정
- 빙고판을 입력 받고, 저장한 뒤, 사회자가 불러주는 숫자들을 하나씩 지운다. 지워진 숫자는
-1
로 표시한다.
- 숫자 한개를 지울 때 마다 빙고가 완성 됐는지를 확인한다. 이때, 가로, 세로, 대각선 모두를 확인해준다.
- 확인하면서 총 빙고의 숫자인
lineCnt
변수의 값을 증가시키고, 이 값이 3을 넘으면 빙고를 외칠 타이밍이므로, 몇번째 숫자인지를 기억하고 있는 result
변수를 출력하고 프로그램을 종료한다.