삽질도사

[백준] 빙고 2578 자바 본문

백준

[백준] 빙고 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();

			}
		}

	
	}
}

'백준' 카테고리의 다른 글

[백준] 파일정리 20291 자바  (0) 2021.03.12
[백준] 스위치 켜고 끄기 1244 자바  (0) 2021.03.12
[백준] 택배 8980 자바  (0) 2021.03.09
[백준] 오리 12933 자바  (0) 2021.03.09
[백준] 달팽이 1913 자바  (0) 2021.03.09