๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฐฑ์ค€

[๋ฐฑ์ค€] 7576 ํ† ๋งˆํ†  ๊ณจ๋“œ5 - ์ž๋ฐ”(Java) / BFS ๊ทธ๋ž˜ํ”„ ๊ธฐ๋ณธ ๋ฌธ์ œ

 

๐Ÿ“‘ ๋ฌธ์ œ

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

 

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

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

www.acmicpc.net

๋”๋ณด๊ธฐ

๋ฌธ์ œ

์ฒ ์ˆ˜์˜ ํ† ๋งˆํ†  ๋†์žฅ์—์„œ๋Š” ํ† ๋งˆํ† ๋ฅผ ๋ณด๊ด€ํ•˜๋Š” ํฐ ์ฐฝ๊ณ ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ํ† ๋งˆํ† ๋Š” ์•„๋ž˜์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๊ฒฉ์ž ๋ชจ์–‘ ์ƒ์ž์˜ ์นธ์— ํ•˜๋‚˜์”ฉ ๋„ฃ์–ด์„œ ์ฐฝ๊ณ ์— ๋ณด๊ด€ํ•œ๋‹ค. 

์ฐฝ๊ณ ์— ๋ณด๊ด€๋˜๋Š” ํ† ๋งˆํ† ๋“ค ์ค‘์—๋Š” ์ž˜ ์ต์€ ๊ฒƒ๋„ ์žˆ์ง€๋งŒ, ์•„์ง ์ต์ง€ ์•Š์€ ํ† ๋งˆํ† ๋“ค๋„ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. ๋ณด๊ด€ ํ›„ ํ•˜๋ฃจ๊ฐ€ ์ง€๋‚˜๋ฉด, ์ต์€ ํ† ๋งˆํ† ๋“ค์˜ ์ธ์ ‘ํ•œ ๊ณณ์— ์žˆ๋Š” ์ต์ง€ ์•Š์€ ํ† ๋งˆํ† ๋“ค์€ ์ต์€ ํ† ๋งˆํ† ์˜ ์˜ํ–ฅ์„ ๋ฐ›์•„ ์ต๊ฒŒ ๋œ๋‹ค. ํ•˜๋‚˜์˜ ํ† ๋งˆํ† ์˜ ์ธ์ ‘ํ•œ ๊ณณ์€ ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ, ์•ž, ๋’ค ๋„ค ๋ฐฉํ–ฅ์— ์žˆ๋Š” ํ† ๋งˆํ† ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ๋Œ€๊ฐ์„  ๋ฐฉํ–ฅ์— ์žˆ๋Š” ํ† ๋งˆํ† ๋“ค์—๊ฒŒ๋Š” ์˜ํ–ฅ์„ ์ฃผ์ง€ ๋ชปํ•˜๋ฉฐ, ํ† ๋งˆํ† ๊ฐ€ ํ˜ผ์ž ์ €์ ˆ๋กœ ์ต๋Š” ๊ฒฝ์šฐ๋Š” ์—†๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค. ์ฒ ์ˆ˜๋Š” ์ฐฝ๊ณ ์— ๋ณด๊ด€๋œ ํ† ๋งˆํ† ๋“ค์ด ๋ฉฐ์น ์ด ์ง€๋‚˜๋ฉด ๋‹ค ์ต๊ฒŒ ๋˜๋Š”์ง€, ๊ทธ ์ตœ์†Œ ์ผ์ˆ˜๋ฅผ ์•Œ๊ณ  ์‹ถ์–ด ํ•œ๋‹ค.

ํ† ๋งˆํ† ๋ฅผ ์ฐฝ๊ณ ์— ๋ณด๊ด€ํ•˜๋Š” ๊ฒฉ์ž๋ชจ์–‘์˜ ์ƒ์ž๋“ค์˜ ํฌ๊ธฐ์™€ ์ต์€ ํ† ๋งˆํ† ๋“ค๊ณผ ์ต์ง€ ์•Š์€ ํ† ๋งˆํ† ๋“ค์˜ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๋ฉฐ์น ์ด ์ง€๋‚˜๋ฉด ํ† ๋งˆํ† ๋“ค์ด ๋ชจ๋‘ ์ต๋Š”์ง€, ๊ทธ ์ตœ์†Œ ์ผ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋ผ. ๋‹จ, ์ƒ์ž์˜ ์ผ๋ถ€ ์นธ์—๋Š” ํ† ๋งˆํ† ๊ฐ€ ๋“ค์–ด์žˆ์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค.

 

์ž…๋ ฅ

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

ํ† ๋งˆํ† ๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ ์žˆ๋Š” ๊ฒฝ์šฐ๋งŒ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค.

 

 

์ถœ๋ ฅ

์—ฌ๋Ÿฌ๋ถ„์€ ํ† ๋งˆํ† ๊ฐ€ ๋ชจ๋‘ ์ต์„ ๋•Œ๊นŒ์ง€์˜ ์ตœ์†Œ ๋‚ ์งœ๋ฅผ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค. ๋งŒ์•ฝ, ์ €์žฅ๋  ๋•Œ๋ถ€ํ„ฐ ๋ชจ๋“  ํ† ๋งˆํ† ๊ฐ€ ์ต์–ด์žˆ๋Š” ์ƒํƒœ์ด๋ฉด 0์„ ์ถœ๋ ฅํ•ด์•ผ ํ•˜๊ณ , ํ† ๋งˆํ† ๊ฐ€ ๋ชจ๋‘ ์ต์ง€๋Š” ๋ชปํ•˜๋Š” ์ƒํ™ฉ์ด๋ฉด -1์„ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค.

 

 

 

 

 

 

 

 

โœ’๏ธ ํ’€์ด 

 ๐Ÿ—“๏ธ 2021.09.24

 

 ๋‚˜ ์ด ๋ฌธ์ œ ์ข€ ์ž˜ ํ’€์—ˆ๋‹ค ์šฐํ•˜ํ•˜!

 ์ฒ˜์Œ ๊ตฌ์ƒ๋„ ์‰ญ์‰ญ ๋˜์—ˆ๊ณ  ๊ตฌ์ƒ๋Œ€๋กœ ์ฝ”๋”ฉ๋„ ์‰ญ์‰ญ ๋˜์—ˆ๋‹ค. ์ด๋Ÿฐ ๋‚ ๋„ ์žˆ์–ด์•ผ ํƒˆ์ฃผ๋ฅผ ์•ˆํ•˜๊ณ  ๊ณ„์† ์ฝ”๋”ฉํ•˜์ง€.......

 ํ’€์ด๋Š” BFS๋กœ ํ’€์—ˆ๋‹ค. 

 ๋‚œ๋„๊ฐ€ ๋‚ฎ์€ ๋งŒํผ ๊ทธ๋ ‡๊ฒŒ ์–ด๋ ต์ง€ ์•Š์€ ๋ฌธ์ œ๋ผ, ์งš์–ด์•ผํ•  ํฌ์ธํŠธ๋งŒ ์ž˜ ์งš์œผ๋ฉด ๋˜์—ˆ๋‹ค.

 

 1. ์ผ์ˆ˜๋ฅผ ๋‹จ์œ„๋กœ ๊ณ„์‚ฐ ํ•ด์•ผํ•œ๋‹ค. ์ต๋Š” ํ† ๋งˆํ† ๊ฐ€ ํ•œ ๊ฐœ๋งŒ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋ฏ€๋กœ, ํ ์‚ฌ์ด์ฆˆ(๋‹น์ผ๊นŒ์ง€ ์ต์€ ํ† ๋งˆํ†  ์ „์ฒด ๊ฐœ์ˆ˜)๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ผ์ˆ˜๋ฅผ ์„ธ์–ด์•ผ ํ•œ๋‹ค. ํ์— ๋‚จ์•„์žˆ๋Š” ํ† ๋งˆํ†  ๊ฐœ์ˆ˜๋งŒํผ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋‚˜๋ฉด ๊ทธ ๋‹ค์Œ ์ผ์ˆ˜์— ์ฒ˜๋ฆฌํ•ด์•ผํ•˜๋Š” ํ† ๋งˆํ† ๊ฐ€ ํ์— ์Œ“์ด๊ฒŒ ๋œ๋‹ค.

 

 2. ์•ˆ์ต์€ ํ† ๋งˆํ†  ๊ฐœ์ˆ˜๋ฅผ ๋ฏธ๋ฆฌ ์„ธ์–ด๋‘” ๋‹ค์Œ, ํ† ๋งˆํ† ๊ฐ€ ์ต์„ ๋•Œ๋งˆ๋‹ค ๊ฐœ์ˆ˜๋ฅผ ์ค„์ด๋Š” ๋ฐฉ์‹์œผ๋กœ ์ต์ง€ ๋ชปํ•œ ํ† ๋งˆํ† ๋ฅผ ์ฒดํฌํ•œ๋‹ค. ํ† ๋งˆํ† ๊ฐ€ ์—†๋Š” ์นธ(-1)์„ ๋งŒ๋‚˜ ๊ธธ์ด ๋ง‰ํžˆ๋ฉด ๋–จ์–ด์ ธ ์žˆ๋Š” ํ† ๋งˆํ† ๋Š” ์ตํž ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์—, ํ๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๊ณ„์‚ฐํ–ˆ๋‹ค๊ณ  ํ•ด์„œ ๋์ด ์•„๋‹ˆ๊ณ  ์•ˆ์ต์€ ํ† ๋งˆํ†  ๊ฐœ์ˆ˜๊ฐ€ 0์ด ๋˜์—ˆ๋Š”์ง€๋ฅผ ๋ณด์•„์•ผ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ํ๊ฐ€ ๋น„๊ฒŒ ๋˜๋ฉด ๋”ฐ๋กœ ์‹ ์„ ํ•œ ํ† ๋งˆํ† ๊ฐ€ ๋‚จ์•„์žˆ๋Š”์ง€ ์ฒดํฌํ•˜๋Š” ์ž‘์—…์„ ํ•ด์ค€๋‹ค.

 

 

 

 

 

 

 

 

๐Ÿ™‹‍โ™€๏ธ ์˜๊ฒฌ

 2๋…„ ์ „์— ๋‚ ๋ฆผ์œผ๋กœ ์จ๋‘” ๋น„๊ณต๊ฐœ ํฌ์ŠคํŠธ๋“ค์„ ์ •๋ฆฌํ•˜๊ณ  ์žˆ๋Š”๋ฐ... ๋ฌธ์ œ๊ฐ€ ์‹ค๋ฒ„1์—์„œ ๊ณจ๋“œ5๋กœ ์ƒํ–ฅ์กฐ์ • ๋๋‹ค ๐Ÿ˜ณ

 ๋˜ ์ฉ๋Š” ํ† ๋งˆํ† ์—์„œ ์ต๋Š” ํ† ๋งˆํ† ๋กœ ๋‚ด์šฉ๋„ ์‚ด์ง ๋ฐ”๋€Œ์—ˆ๋‹ค ใ…‹ใ…‹

 ํ’€์ด ์จ๋‘” ๊ฑธ ๋ณด๋‹ˆ ์ด๋•Œ์˜ ๋‚˜๋Š” ์š”์ •๋„์˜ BFS๋„ ๊ฝค๋‚˜ ์–ด๋ ค์›Œ ํ–ˆ๋˜ ๊ฒƒ ๊ฐ™์€๋ฐ, ํ’€๊ณ  ๋ฟŒ๋“ฏํ•ดํ–ˆ๋˜ ๊ณผ๊ฑฐ์˜ ๋‚˜์—ฌ..๊ฝค๋‚˜ ๊ท€์—ฌ์› ๊ตฌ๋งŒ(ใ…Žใ…Ž)

 

 

 

 

 

 

 

 

๐Ÿ’ป ์†Œ์Šค์ฝ”๋“œ: ์ž๋ฐ”(Java)

public class Main_๋ฐฑ์ค€_7576_ํ† ๋งˆํ† _์‹ค๋ฒ„I {

	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		int M = Integer.parseInt(st.nextToken());
		int N = Integer.parseInt(st.nextToken());
		
		int[][] map = new int[N][M];
		int tomatoes = 0;
		Queue<int[]> queue = new LinkedList<int[]>();
		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) queue.offer(new int[] {i, j});
				if(map[i][j]==0) tomatoes++;
			}
		}//input
		
//		1. ์ž…๋ ฅ๋ฐ›์„ ๋•Œ 0์˜ ๊ฐœ์ˆ˜(์•ˆ ์ต์€ ํ† ๋งˆํ† ) ์„ธ๊ณ , 1์ธ ๊ฒฝ์šฐ ํ์— ๋„ฃ์–ด์ฃผ๊ธฐ
//		2. ํ์— ์ž…๋ ฅ๋œ ๊ฐ’๋“ค์„ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด์–ด ์ฃผ๋ณ€ ํ† ๋งˆํ†  ์ตํžˆ๊ณ  ํ์— ๋„ฃ๊ธฐ. ์ฃผ๋ณ€ ๊ฐ’์ด -1์ด๊ฑฐ๋‚˜ 1์ธ ๊ฒฝ์šฐ ํ์— ๋„ฃ์ง€ ์•Š์Œ.
//		3. ํ๊ฐ€ ๋น„๊ณ  ๋‚˜์„œ ๋‚จ์€ ์•ˆ ์ต์€ ํ† ๋งˆํ†  ๊ฐœ์ˆ˜๊ฐ€ 0์ด ์•„๋‹ˆ๋ฉด -1
		int[] dr = {1, -1, 0, 0};
		int[] dc = {0, 0, 1, -1};
		int result = 0;
		while(tomatoes != 0 && queue.size()>0) {
			int size = queue.size();
			for (int i = 0; i < size; i++) {
				int[] cur = queue.poll();
				int r = cur[0];
				int c = cur[1];
				
				for (int j = 0; j < 4; j++) {
					int nr = r + dr[j];
					int nc = c + dc[j];
					
					if(nr>=0 && nr<N && nc>=0 && nc<M && map[nr][nc]==0) {
						tomatoes--;
						map[nr][nc]=1;
						queue.offer(new int[] {nr,nc});
					}
				}
			}// depth
			result ++;
		}// end of queue
		
		if(tomatoes != 0) result = -1;
		System.out.println(result);
		
	}//end of main
}//end of class

 

 

 

 

 

 

 

 

 

๐Ÿ’Ž ๐Ÿ’Ž ๐Ÿ’Ž

 

 

๏ผฐ๏ฝ๏ฝ“๏ฝ”๏ฝ…๏ฝ„ ๏ผข๏ฝ™ ๏ผณ๏ผก๏ผน

๐˜›๐˜ฉ๐˜ข๐˜ฏ๐˜ฌ๐˜ด ๐˜ง๐˜ฐ๐˜ณ ๐˜ณ๐˜ฆ๐˜ข๐˜ฅ๐˜ช๐˜ฏ๐˜จ