2021년 7월 21일 수요일 - 오늘은 이렇게 더워도 되나 싶다;
오늘 올려볼 문제는 2578번 빙고 라는 문제이다.
사진을 클릭하면 해당 문제로 이동합니다.
오늘은 딱 보기에도 쉬워보이는 문제를 가져왔다!이번에는 진짜로 쉽다는 거
입력 예제
배열의 크기도 25이고 들어오는 입력의 최대 개수도 25개이므로 그저 선형적으로 문제를 풀어도 아마 잘 풀릴 것이다.
하지만 나는 욕심을 좀 더 내서 더 빠르게 문제를 풀어볼 예정이다!하지만 입력 케이스가 크지 않아서 큰 차이는 없을 것이다...
풀이 및 코드
그래서 생각해낸 기법은 boolean 배열을 사용하는 방법이다!
백문이 불여일견이라고 바로 코드를 봐보자!
풀이코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
// 해당 숫자를 사회자가 불렀는지 확인하는 boolean 배열
boolean[] check = new boolean[26];
// 빙고판으로 사용되는 int 배열
int[][] bingo = new int[5][5];
// 결과값 저장하는 변수
int result = 0;
// 빙고판에 숫자 넣기
for(int i = 0; i < 5; i++)
{
String[] input = br.readLine().split(" ");
for(int j = 0; j < 5; j++)
{
bingo[i][j] = Integer.parseInt(input[j]);
}
}
Loop:
for(int i = 0; i < 5; i++)
{
String[] input = br.readLine().split(" ");
for(int j = 0; j < 5; j++)
{
// 선이 그어진 개수를 세는 변수
int lines = 0;
// 사회자가 부른 숫자를 true로 바꾸어준다.
check[Integer.parseInt(input[j])] = true;
// 결과값 + 1
result++;
// 가로줄, 세로줄 확인하는 과정
for(int a = 0; a < 5; a++)
{
if(check[bingo[a][0]] && check[bingo[a][1]] && check[bingo[a][2]] && check[bingo[a][3]] && check[bingo[a][4]])
lines++;
if(check[bingo[0][a]] && check[bingo[1][a]] && check[bingo[2][a]] && check[bingo[3][a]] && check[bingo[4][a]])
lines++;
}
// 대각선 2줄 확인하는 과정
if(check[bingo[0][0]] && check[bingo[1][1]] && check[bingo[2][2]] && check[bingo[3][3]] && check[bingo[4][4]])
lines++;
if(check[bingo[0][4]] && check[bingo[1][3]] && check[bingo[2][2]] && check[bingo[3][1]] && check[bingo[4][0]])
lines++;
// 선이 그어진 줄 수가 3이 넘어가면 반복문 벗어나기
if(lines >= 3)
break Loop;
}
}
bw.write(result + "\n");
bw.flush();
}
}
제출 화면
boolean 배열을 빙고판과 똑같이 2차원 배열로 만드는 것이 아닌 숫자가 불렸는지 판단하는 용도로만 사용하면 선형적으로 접근하지 않고 문제를 풀 수 있다!
오늘은 굉장히 쉬운 문제였지만 시간적으로 좀 더 우세한 방법으로 풀어봤다!
물론 이 방법도 입력 개수가 커지게 되면 사용하기 힘들지만 적당한 입력 개수에서는 사용해볼만한 기법이다!
'백준 문제 풀이' 카테고리의 다른 글
[BOJ / 백준] 백준 1043번 문제를 풀어보았다. (ft. Java) (0) | 2021.07.26 |
---|---|
[BOJ / 백준] 백준 1987번 문제를 풀어보았다. (ft. Java) (0) | 2021.07.24 |
[BOJ / 백준] 백준 2243번 문제를 풀어보았다. (ft. Java) (0) | 2021.07.16 |
[BOJ / 백준] 백준 15904번 문제를 풀어보았다. (ft. Java) (0) | 2021.07.16 |
[BOJ / 백준] 백준 1103번 문제를 풀어보았다. (ft. Java) (0) | 2021.07.16 |