문제
https://www.acmicpc.net/problem/2578
코드
package com.company;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
class Main {
static int[][] board = new int[5][5];
static int count;
static boolean useUp = false;
static boolean useDown = false;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int k = 0, l = 0;
int a = 0, b = 0;
for (int i = 0; i < 5; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < 5; j++) {
board[i][j] = Integer.parseInt(st.nextToken());
}
}
for (int i = 0; i < 5; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < 5; j++) {
int num = Integer.parseInt(st.nextToken());
for (k = 0; k < 5; k++) {
for (l = 0; l < 5; l++) {
if (board[k][l] == num) {
board[k][l] = 0;
a = k;
b = l;
}
}
}
int t = 0;
rCheck(a, b);
lCheck(a, b);
upCheck();
downCheck();
if (count >= 3) {
System.out.println(i * 5 + j + 1);
return;
}
}
}
}
private static void rCheck(int i, int j) {
int zeroCount = 0;
for (int k = 0; k < 5; k++) {
if (board[i][k] == 0)
zeroCount++;
}
if (zeroCount == 5)
count++;
}
private static void lCheck(int i, int j) {
int zeroCount = 0;
for (int k = 0; k < 5; k++) {
if (board[k][j] == 0)
zeroCount++;
}
if (zeroCount == 5)
count++;
}
private static void upCheck() {
int zeroCount = 0;
if (!useUp) {
for (int i = 0; i < 5; i++) {
if (board[4 - i][i] == 0)
zeroCount++;
}
if (zeroCount == 5) {
count++;
useUp = true;
}
}
}
private static void downCheck() {
int zeroCount = 0;
if (!useDown) {
for (int i = 0; i < 5; i++) {
if (board[i][i] == 0)
zeroCount++;
}
if (zeroCount == 5)
count++;
useDown = true;
}
}
}
풀이
풀이 방법에 대해서 쉽게 생각을 할수있었지만 구현하는데에 있어서 수고스러운 문제였다. 풀이의 개요는 다음과 같다. 먼저 빙고값을 받고 저장을 해준다. 그리고 사회자가 불러주는 값에 대해서는 하나씩 받으면서 바로바로 처리해준다. 이때 처리하는 메서드는 총 4개이다. 가로줄에 대해서 검사하는 메서드와 세로줄에 대해서 검사하는 메서드, 대각선을 검사하는 메서드 2개로 이루어진다. 이를 한번에 구현할려면 복잡해지니 하나씩 구분해서 구현하는것이 바람직 하다. 메서드의 구현 방법은 코드를 보면 쉽게 이해가 될 것이다.
'백준' 카테고리의 다른 글
백준 1913 달팽이 (JAVA) (0) | 2022.07.11 |
---|---|
백준 4396 지뢰 찾기 (JAVA) (0) | 2022.07.08 |
백준 20546 🐜기적의 매매법🐜 (JAVA) (0) | 2022.07.05 |
백준 21918 전구 (JAVA) (0) | 2022.07.05 |
백준 5597 과제 안 내신 분..? (JAVA) (0) | 2022.07.05 |