728x90
1. 문제
https://www.acmicpc.net/problem/2578
1. 5*5 빙고판
2. 모두 자연수, 1~25까지 적혀있음
3. 빙고는 가로, 세로, 대각선 두개 가능. 세 개 이상이면 끝
4. 끝날 때 사회자가 몇 번째 수를 불렀는지 출력
2. 풀이
생각한 방식은 다음과 같다.
1. 빙고판 이차원 배열에 저장
2. 사회자가 숫자를 부를 때마다 빙고 지우는 함수 호출
3. 빙고판에서 숫자를 찾아 그 자리를 0으로 바꿈
4. 바꾼 자리(x,y)를 기준으로 새로 빙고가 생겼는지 탐색
5. 3함수로 다시 돌아와서, static 변수 bingoCnt가 3보다 크다면 true, 작다면 false 반환
6. 2메인으로 돌아와서 5가 true를 리턴했다면 프로그램 종료
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BOJ_2578_빙고 {
static int[][] bingo;
static int bingoCnt;
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
//입력
bingo = new int[5][5];
for (int i = 0; i < 5; i++) {
st = new StringTokenizer(in.readLine());
for (int j = 0; j < 5; j++) {
bingo[i][j] = Integer.parseInt(st.nextToken());
}
}
//사회자가 숫자 부름과 동시에 탐색
for (int i = 0; i < 5; i++) {
st = new StringTokenizer(in.readLine());
for (int j = 0; j < 5; j++) {
if (removeBingo(Integer.parseInt(st.nextToken()))) {
System.out.println(i * 5 + j + 1);
return;
}
}
}
}
// 해당하는 숫자 빙고를 찾아 0으로 바꿔주는 함수
private static boolean removeBingo(int num) {
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (bingo[i][j] == num) {
bingo[i][j] = 0;
checkBingo(i, j);
return bingoCnt >= 3;
}
}
}
return false;
}
// 현재 x,y를 기준으로 빙고가 생겼는지 확인
private static void checkBingo(int x, int y) {
//세로 -> y를 0으로 설정
//가로 -> x를 0으로 설정
//대각선 -> y를 0으로, x를 0으로
//다른 대각선 -> y를 0으로, x를 4로
int row = 0, col = 0, diagonal_r = 0, diagonal_l = 0;
for (int i = 0; i < 5; i++) {
if (bingo[i][y] == 0) ++row;
if (bingo[x][i] == 0) ++col;
if (x == y && bingo[i][i] == 0) ++diagonal_l;
if (x == 4 - y && bingo[i][4 - i] == 0) ++diagonal_r;
}
if(row==5) ++bingoCnt;
if(col==5) ++bingoCnt;
if(diagonal_r==5) ++bingoCnt;
if(diagonal_l==5) ++bingoCnt;
}
}
3. 결과
3이상이면 끝내야하는데 3일때만 끝내도록 설정해서 틀렸다.
'코딩테스트 > BOJ' 카테고리의 다른 글
[BOJ] 2563 색종이 - JAVA (0) | 2022.02.11 |
---|---|
[BOJ] 2564 경비원 - JAVA (0) | 2022.02.11 |
[BOJ] 3053 택시기하학 - JAVA (0) | 2022.02.10 |
[BOJ] 2605 줄세우기 - JAVA (0) | 2022.02.09 |
[BOJ] 2309 일곱난쟁이 - JAVA (0) | 2022.02.09 |
댓글