03
19

https://www.acmicpc.net/problem/7576

 

7576๋ฒˆ: ํ† ๋งˆํ† 

์ฒซ ์ค„์—๋Š” ์ƒ์ž์˜ ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋‘ ์ •์ˆ˜ M,N์ด ์ฃผ์–ด์ง„๋‹ค. M์€ ์ƒ์ž์˜ ๊ฐ€๋กœ ์นธ์˜ ์ˆ˜, N์€ ์ƒ์ž์˜ ์„ธ๋กœ ์นธ์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๋‹จ, 2 ≤ M,N ≤ 1,000 ์ด๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ๋Š” ํ•˜๋‚˜์˜ ์ƒ์ž์— ์ €์žฅ๋œ ํ† ๋งˆํ† 

www.acmicpc.net

 

์˜ค๋‹ต์ฝ”๋“œ๋Š” ๋”ฐ๋กœ ์—†๊ณ  ๋‚ด๊ฐ€ ์‹ค์ˆ˜ํ–ˆ๋˜ ๋ถ€๋ถ„์„ ๋ฐ‘์—์„œ ๊ธฐ๋กํ•˜๊ฒ ๋‹ค.


์˜ค๋‹ต๋…ธํŠธ(ํ‘ธ๋Š” ๋™์•ˆ ์‚ฌ๊ณ ๊ณผ์ • ๋ฐ ๊ฐœ์„ ์ )

์ด ํ† ๋งˆํ† ๋ฌธ์ œ์—์„œ ์ค‘์š”ํ•œ ๊ฒƒ์€ ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ† ๋งˆํ† ๊ฐ€ ์ต์„ ๋•Œ, ๋ฉ€๋ฆฌ ๋–จ์–ด์ ธ์žˆ์–ด๋„ ๋™์ผํ•œ ๋‚ ์งœ์— ์ต๋Š”๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ฒ˜์Œ์—๋Š” day๋ฅผ ํ์— ์•ˆ๋„ฃ๊ณ  ๊ทธ๋ƒฅ ํ์— poll๋ ๋•Œ๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ๋Š˜๋ ธ๋Š”๋ฐ, ์ด๋Ÿฌ๋ฉด ๋˜‘๊ฐ™์€ ๋‚ ์งœ์— ์ต๊ธฐ ์‹œ์ž‘ํ•ด์•ผ๋˜๋Š” ํ† ๋งˆํ† ๊ฐ€ ๋‹ค๋ฅธ ๋‚ ์งœ์— ์ต์–ด๋ฒ„๋ฆฐ๋‹ค. 

 

day๋ฅผ ํ์— ๋„ฃ๊ณ  ๊ฐ™์ด ๊ด€๋ฆฌํ•ด์„œ ์ด๊ฑด day๋ณด๋‹ค ํ•˜๋‚˜์”ฉ ๋” ๋งŽ๊ฒŒ ํ•ด์•ผ ํ์—์„œ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋‚ ์งœ๊ด€๋ฆฌ๊ฐ€ ๋œ๋‹ค. ์ธ๊ตฌ์ด๋™ ๋ฌธ์ œ๋ž‘ ๋น„์Šทํ•œ ๋งฅ๋ฝ์ด ์žˆ๋‹ค๊ณ  ๋Š๊ผˆ๋‹ค.


์ •๋‹ต์ฝ”๋“œ

import java.util.*;
import java.io.*;

public class Main {
	static int n;
	static int m;
	static int[] di = { -1, 0, 1, 0 };
	static int[] dj = { 0, 1, 0, -1 };

	public static void main(String[] args) throws Exception {
		System.setIn(new FileInputStream("res/input.txt"));
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		m = Integer.parseInt(st.nextToken());
		n = Integer.parseInt(st.nextToken());
		int[][] map = new int[n][m];
		LinkedList<int[]> q = new LinkedList();
		int tomatos = 0;
		for (int i = 0; i < n; i++) {
			st = new StringTokenizer(br.readLine(), " ");
			for (int j = 0; j < m; j++) {
				map[i][j] = Integer.parseInt(st.nextToken());
				if (map[i][j] == 1) {
					q.add(new int[] { i, j, 0 });
				}
				if (map[i][j] == 0) {
					tomatos++;
				}
			}
		}
		int day = 0;
		while (!q.isEmpty()) {
			int[] cur = q.pollFirst();
			day = cur[2];
			for (int i = 0; i < 4; i++) {
				int ni = di[i] + cur[0];
				int nj = dj[i] + cur[1];
				if (ni < n && nj < m && ni >= 0 && nj >= 0) {
					if (map[ni][nj] == 0) {
						map[ni][nj] = 1;
						q.add(new int[] { ni, nj, day + 1 });
					}
				}
			}
		}
		
		for(int i=0; i<n; i++) {
			for(int j=0; j<m; j++) {
				if(map[i][j]== 0) {
					System.out.println(-1);
					return;
				}
			}
		}

		System.out.println(day);

	}
}

 

๋„์›€์ด ๋๋‹ค๋ฉด ๋Œ“๊ธ€์ด๋‚˜ ๊ณต๊ฐ ๋ฒ„ํŠผ ํ•œ ๋ฒˆ์”ฉ ๋ˆ„๋ฅด๊ณ  ๊ฐ€์ฃผ์„ธ์š”! ๋กœ๊ทธ์ธ ์•ˆํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค ^_^

 

๋ฐ˜์‘ํ˜•
COMMENT