티스토리 뷰
https://www.acmicpc.net/problem/2578
문제
접근 방법
처음 문제를 보고 단순히 "for문 여러번 돌려야겠는데?" 라고 생각했습니다.
이 생각을 하고 다른 간결한 풀이가 있는지 생각해봤지만 떠오르는 것이 없었고,
자신의 빙고판과 사회자가 부를 숫자를 배열에 입력받은 후
for문을 돌려 수를 확인하고, 수를 확인한 후에 빙고가 있는지 확인하는 과정을 구현하였습니다.
코드
import java.io.*;
import java.util.*;
class Main {
private static int[][] matrix = new int[5][5]; //나의 빙고판
private static int[][] sequence = new int[5][5]; // 사회자가 순서대로 부를 수
static int N = 5;
public static int bingo() {
int answer = 0;
for(int i=0; i<N; i++) {
int cnt = 0;
for(int j=0; j<N; j++) {
if(matrix[i][j]==0) cnt++;
}
if(cnt==5) answer++;
} //가로
for(int i=0; i<N; i++) {
int cnt = 0;
for(int j=0; j<N; j++) {
if(matrix[j][i]==0) cnt++;
}
if(cnt==5) answer++;
} // 세로
int cnt = 0;
for(int i=0; i<N; i++) {
if(matrix[i][i]==0) cnt++;
if(cnt==5) answer++;
} // 우하향 대각선
cnt = 0;
for(int i=0; i<N; i++) {
if(matrix[N-1-i][i]==0) cnt++;
if(cnt==5) answer++;
} // 우상향 대각선
return answer;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
for(int i=0; i<N; i++) {
st = new StringTokenizer(br.readLine());
for(int j=0; j<N; j++) {
matrix[i][j] = Integer.parseInt(st.nextToken());
}
} // 빙고판 입력
for(int i=0; i<N; i++) {
st = new StringTokenizer(br.readLine());
for(int j=0; j<N; j++) {
sequence[i][j] = Integer.parseInt(st.nextToken());
}
} // 사회자 부르는 수 입력
int cnt = 0;
for(int i=0; i<N; i++) {
for(int j=0; j<N; j++) {
cnt++;
int call = sequence[i][j];
for(int k = 0; k<N; k++) {
for(int l = 0; l<N; l++) {
if(matrix[k][l]==call) matrix[k][l] = 0;
}
} // x표시 하기 0으로
if(bingo()>=3) {
System.out.println(cnt);
return;
}
}
}
}
}