반응형
[ 코드 ]
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int[][] bingo = new int[5][5];
static int[][] cBingo = new int[5][5];
static int[][] visited = new int[5][5];
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = null;
int answer = 0;
for(int i=0; i<5; i++) { //bingo판 입력
st = new StringTokenizer(br.readLine()," ");
for(int j=0; j<5; j++) {
bingo[i][j] = Integer.parseInt(st.nextToken());
}
}
for(int i=0; i<5; i++) { //call bingo 입력
st = new StringTokenizer(br.readLine()," ");
for(int j=0; j<5; j++) {
cBingo[i][j] = Integer.parseInt(st.nextToken());
}
}
loop :
for(int i=0; i<5; i++) {
for(int j=0; j<5; j++) {
int tmp = cBingo[i][j];
answer++; //몇번째 부르는 지
for(int a=0; a<5; a++) {
for(int b=0; b<5; b++) {
if(tmp==bingo[a][b]) { //부른것과 같다면
visited[a][b] = 1;
if(InArea()==true) break loop;
}
}
}
}
}
System.out.println(answer);
}
private static boolean InArea() {
int line = 0;
int su = 0;
//가로
for(int i=0; i<5; i++) {
for(int j=0; j<5; j++) {
if(visited[i][j]==1) su++;
}
if(su==5) line++;
su = 0;
}
//세로
for(int i=0; i<5; i++) {
for(int j=0; j<5; j++) {
if(visited[j][i]==1) su++;
}
if(su==5) line++;
su = 0;
}
//좌->우 대각선
for(int i=0; i<5; i++) {
if(visited[i][i]==1) su++;
}
if(su==5) line++;
su = 0;
//우->좌 대각선
for(int i=0; i<5; i++) {
if(visited[i][4-i]==1) su++;
}
if(su==5) line++;
su = 0;
if(line>=3) return true;
return false;
}
}
대각선에서 따로 세지 않아서 문제였던 것 같다.
다른 풀이에서는 2차원 배열 한 판에서 숫자를 지워나가며 해결했는데,
난 다른 판에 1을 적어나간 뒤 한 줄이 되면 라인을 그리는 전형적인 빙고판을 만들어봤다.
[ 틀린 코드 ]
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class bj2578 {
static int[][] bingo = new int[5][5];
static int[][] cBingo = new int[5][5];
static int[][] visited = new int[5][5];
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = null;
int answer = 0;
for(int i=0; i<5; i++) { //bingo판 입력
st = new StringTokenizer(br.readLine()," ");
for(int j=0; j<5; j++) {
bingo[i][j] = Integer.parseInt(st.nextToken());
}
}
for(int i=0; i<5; i++) { //call bingo 입력
st = new StringTokenizer(br.readLine()," ");
for(int j=0; j<5; j++) {
cBingo[i][j] = Integer.parseInt(st.nextToken());
}
}
loop :
for(int i=0; i<5; i++) {
for(int j=0; j<5; j++) {
int tmp = cBingo[i][j];
answer++; //몇번째 부르는 지
for(int a=0; a<5; a++) {
for(int b=0; b<5; b++) {
if(tmp==bingo[a][b]) { //부른것과 같다면
visited[a][b] = 1;
if(InArea()==true) break loop;
}
}
}
}
}
System.out.println(answer);
}
private static boolean InArea() {
int line = 0;
int su = 0;
//가로
for(int i=0; i<5; i++) {
for(int j=0; j<5; j++) {
if(visited[i][j]==1) su++;
}
if(su==5) line++;
su = 0;
}
//세로
for(int i=0; i<5; i++) {
for(int j=0; j<5; j++) {
if(visited[j][i]==1) su++;
}
if(su==5) line++;
su = 0;
}
//대각선
for(int i=0; i<5; i++) {
for(int j=0; j<5; j++) {
if(i==0 && j==0) { //대각선 1
if(visited[i][j]==1) {
su++;
i = i+1;
j = j+1;
}
if(su==5) line++;
su = 0;
}
if(i==0 && j==4) { //대각선 2
if(visited[i][j]==1) {
su++;
i = i+1;
j = j-1;
}
if(su==5) line++;
su = 0;
}
}
}
if(line>=3) return true;
return false;
}
}
※ 오늘의 교훈
수학문제를 풀 땐 조금 더 신중히 풀어보도록 하자.
반응형
'Algorithm > 백준' 카테고리의 다른 글
[백준] 14503번 : 로봇 청소기 / java (2) | 2021.02.26 |
---|---|
[백준] 2638번 : 치즈 / java (0) | 2021.02.04 |
[백준] 2309번 : 일곱 난쟁이 / java (0) | 2020.09.23 |
[백준] 10866번 : 덱 / c++ (0) | 2020.05.29 |
[백준] 1436번 : 영화감독 숌 / c++14 (0) | 2020.05.27 |