백준
[백준] 빙고 2578 자바
삽질도사
2021. 3. 9. 23:02
반응형
로직이 비슷해서 복붙하다가 실수한지도 모르고 엄청 꼬였었습니다...
이 문제에서 얻을 점은 맵의 사이즈가 작아서 무식하게 풀어도 풀린다는 점을 문제를 보고 알 수 있어야 한다는 점정도이고, 구현 문제라함은 가능한 실수가 없이 정리를 잘해가면서, 차근차근 풀어야 한다는 점을 상기시켰습니다.
개인적으로 구현문제를 풀 때에 맵이 존재하면 중간에 로직을 짜다가 맵을 보여주는 함수를 만들어서 확인할 때가 종종 있습니다. 이번 경우에는 제가 실수를 함으로써 무엇이 잘못되었나 확인하는데에 사용했었습니다.
제 코드에서 map을 3차원으로 만듬으로써 저는 [5][5]짜리 맵이 두 개 있는 듯한 효과를 주었습니다. 이러한 코드방식은
이후에 벽부수고 이동하기 등 bfs에서 종종 쓰이기도 합니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class 빙고 {
static int[][][] map = new int[5][5][2];
static int bingo, ans;
static boolean func() {
bingo = 0;
int check = 0;
// 가로
for (int y = 0; y < 5; y++) {
for (int x = 0; x < 5; x++) {
if (map[y][x][1] != 0)
check++;
}
if (check == 5) {
bingo++;
}
check = 0;
}
// 세로
for (int x = 0; x < 5; x++) {
for (int y = 0; y < 5; y++) {
if (map[y][x][1] != 0)
check++;
}
if (check == 5) {
bingo++;
}
check = 0;
}
//대각선
for (int q = 0; q < 5; q++) {
if (map[q][q][1] != 0)
check++;
}
if (check == 5) {
bingo++;
}
check = 0;
//대각선
for (int q = 0; q < 5; q++) {
if (map[q][4 - q][1] != 0)
check++;
}
if (check == 5) {
bingo++;
}
check = 0;
//결과
if (bingo >= 3) {
return true;
} else {
return false;
}
}
static void find(int n) {
for (int y = 0; y < 5; y++) {
for (int x = 0; x < 5; x++) {
if (map[y][x][0] == n)
map[y][x][1] = 1;
}
}
}
static void show() {
for (int y = 0; y < 5; y++) {
System.out.println();
for (int x = 0; x < 5; x++) {
System.out.print(map[y][x][1] + " ");
}
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
for (int y = 0; y < 5; y++) {
st = new StringTokenizer(br.readLine());
for (int x = 0; x < 5; x++) {
map[y][x][0] = Integer.parseInt(st.nextToken());
}
}
for (int y = 0; y < 5; y++) {
st = new StringTokenizer(br.readLine());
for (int x = 0; x < 5; x++) {
int next = Integer.parseInt(st.nextToken());
ans++;
find(next);
if (func()) {
// show();
System.out.println(ans);
break;
}
// else
// show();
// System.out.println();
}
}
}
}반응형