[Algorithm] ๐Ÿง€๋ฐฑ์ค€ 2638 ์น˜์ฆˆ

HaJingJingยท2021๋…„ 6์›” 15์ผ
0

Algorithm

๋ชฉ๋ก ๋ณด๊ธฐ
66/119

0. ๋ฌธ์ œ

Nร—M (5โ‰คN, Mโ‰ค100)์˜ ๋ชจ๋ˆˆ์ข…์ด ์œ„์— ์•„์ฃผ ์–‡์€ ์น˜์ฆˆ๊ฐ€ <๊ทธ๋ฆผ 1>๊ณผ ๊ฐ™์ด ํ‘œ์‹œ๋˜์–ด ์žˆ๋‹ค. ๋‹จ, N ์€ ์„ธ๋กœ ๊ฒฉ์ž์˜ ์ˆ˜์ด๊ณ , M ์€ ๊ฐ€๋กœ ๊ฒฉ์ž์˜ ์ˆ˜์ด๋‹ค. ์ด ์น˜์ฆˆ๋Š” ๋ƒ‰๋™ ๋ณด๊ด€์„ ํ•ด์•ผ๋งŒ ํ•˜๋Š”๋ฐ ์‹ค๋‚ด์˜จ๋„์— ๋‚ด์–ด๋†“์œผ๋ฉด ๊ณต๊ธฐ์™€ ์ ‘์ด‰ํ•˜์—ฌ ์ฒœ์ฒœํžˆ ๋…น๋Š”๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด๋Ÿฌํ•œ ๋ชจ๋ˆˆ์ข…์ด ๋ชจ์–‘์˜ ์น˜์ฆˆ์—์„œ ๊ฐ ์น˜์ฆˆ ๊ฒฉ์ž(์ž‘ ์€ ์ •์‚ฌ๊ฐํ˜• ๋ชจ์–‘)์˜ 4๋ณ€ ์ค‘์—์„œ ์ ์–ด๋„ 2๋ณ€ ์ด์ƒ์ด ์‹ค๋‚ด์˜จ๋„์˜ ๊ณต๊ธฐ์™€ ์ ‘์ด‰ํ•œ ๊ฒƒ์€ ์ •ํ™•ํžˆ ํ•œ์‹œ๊ฐ„๋งŒ์— ๋…น์•„ ์—†์–ด์ ธ ๋ฒ„๋ฆฐ๋‹ค. ๋”ฐ๋ผ์„œ ์•„๋ž˜ <๊ทธ๋ฆผ 1> ๋ชจ์–‘๊ณผ ๊ฐ™์€ ์น˜์ฆˆ(ํšŒ์ƒ‰์œผ๋กœ ํ‘œ์‹œ๋œ ๋ถ€๋ถ„)๋ผ๋ฉด C๋กœ ํ‘œ์‹œ๋œ ๋ชจ๋“  ์น˜์ฆˆ ๊ฒฉ์ž๋Š” ํ•œ ์‹œ๊ฐ„ ํ›„์— ์‚ฌ๋ผ์ง„๋‹ค.

<๊ทธ๋ฆผ 2>์™€ ๊ฐ™์ด ์น˜์ฆˆ ๋‚ด๋ถ€์— ์žˆ๋Š” ๊ณต๊ฐ„์€ ์น˜์ฆˆ ์™ธ๋ถ€ ๊ณต๊ธฐ์™€ ์ ‘์ด‰ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ๊ฐ€์ •ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€ ๋กœ ์ด ๊ณต๊ฐ„์— ์ ‘์ด‰ํ•œ ์น˜์ฆˆ ๊ฒฉ์ž๋Š” ๋…น์ง€ ์•Š๊ณ  C๋กœ ํ‘œ์‹œ๋œ ์น˜์ฆˆ ๊ฒฉ์ž๋งŒ ์‚ฌ๋ผ์ง„๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ•œ ์‹œ๊ฐ„ ํ›„, ์ด ๊ณต๊ฐ„์œผ๋กœ ์™ธ๋ถ€๊ณต๊ธฐ๊ฐ€ ์œ ์ž…๋˜๋ฉด <๊ทธ๋ฆผ 3>์—์„œ์™€ ๊ฐ™์ด C๋กœ ํ‘œ์‹œ๋œ ์น˜์ฆˆ ๊ฒฉ์ž๋“ค์ด ์‚ฌ๋ผ์ง€๊ฒŒ ๋œ๋‹ค.

๋ชจ๋ˆˆ์ข…์ด์˜ ๋งจ ๊ฐ€์žฅ์ž๋ฆฌ์—๋Š” ์น˜์ฆˆ๊ฐ€ ๋†“์ด์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ๊ฐ€์ •ํ•œ๋‹ค. ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ์น˜์ฆˆ๊ฐ€ ๋ชจ๋‘ ๋…น์•„ ์—†์–ด์ง€๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์ •ํ™•ํ•œ ์‹œ๊ฐ„์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ
์ฒซ์งธ ์ค„์—๋Š” ๋ชจ๋ˆˆ์ข…์ด์˜ ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋‘ ๊ฐœ์˜ ์ •์ˆ˜ N, M (5โ‰คN, Mโ‰ค100)์ด ์ฃผ์–ด์ง„๋‹ค. ๊ทธ ๋‹ค์Œ N๊ฐœ์˜ ์ค„์—๋Š” ๋ชจ๋ˆˆ์ข…์ด ์œ„์˜ ๊ฒฉ์ž์— ์น˜์ฆˆ๊ฐ€ ์žˆ๋Š” ๋ถ€๋ถ„์€ 1๋กœ ํ‘œ์‹œ๋˜๊ณ , ์น˜์ฆˆ๊ฐ€ ์—†๋Š” ๋ถ€๋ถ„์€ 0์œผ๋กœ ํ‘œ์‹œ๋œ๋‹ค. ๋˜ํ•œ, ๊ฐ 0๊ณผ 1์€ ํ•˜๋‚˜์˜ ๊ณต๋ฐฑ์œผ๋กœ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ๋‹ค.

์ถœ๋ ฅ
์ถœ๋ ฅ์œผ๋กœ๋Š” ์ฃผ์–ด์ง„ ์น˜์ฆˆ๊ฐ€ ๋ชจ๋‘ ๋…น์•„ ์—†์–ด์ง€๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์ •ํ™•ํ•œ ์‹œ๊ฐ„์„ ์ •์ˆ˜๋กœ ์ฒซ ์ค„์— ์ถœ๋ ฅํ•œ๋‹ค.

1. ์•„์ด๋””์–ด

๐Ÿ’ก ์น˜์ฆˆ(1), ์ดˆ๊ธฐ ๊ณต๊ธฐ(0), ์™ธ๋ถ€ ๊ณต๊ธฐ(9)
๐Ÿ’ก 0. ์น˜์ฆˆ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€ ํŒŒ์•…
map์— ์น˜์ฆˆ(1)๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์žˆ์œผ๋ฉด return false
์•„๋‹ˆ๋ผ๋ฉด, return true
๐Ÿ’ก 1. ์™ธ๋ถ€ ๊ณต๊ธฐ, ๋‚ด๋ถ€ ๊ณต๊ธฐ ๊ตฌ๋ณ„
BFS ์™ธ๋ถ€๊ณต๊ธฐ(9)๋Š” (0,0)์—์„œ ์‹œ์ž‘๋˜์–ด์„œ ๋ชจ๋‘ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์Œ
๐Ÿ’ก 2. ์น˜์ฆˆ ๋…น์ด๊ธฐ
์น˜์ฆˆ(1)๋ฅผ ์ฐพ๊ณ  4๋ณ€ ์ค‘ 2๋ณ€์ด ์™ธ๋ถ€๊ณต๊ธฐ(9)์ด๋ฉด, ์น˜์ฆˆ(1)๋ฅผ ์ดˆ๊ธฐ๊ณต๊ธฐ(0)๋กœ
๋ฐ”๊ฟˆ
๐Ÿ’ก 3. ์ดˆ๊ธฐํ™”
์น˜์ฆˆ๊ฐ€ ๋…น๊ณ  ๋‚œ ํ›„, ์™ธ๋ถ€ ๊ณต๊ธฐ์™€ ๋‚ด๋ถ€ ๊ณต๊ธฐ๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด, ์™ธ๋ถ€ ๊ณต๊ธฐ
(9)๋ฅผ ๋ชจ๋‘ ์ดˆ๊ธฐ ๊ณต๊ธฐ(0)๋กœ ๋ฐ”๊ฟˆ
๐Ÿ’ก 0-3๊นŒ์ง€ 0์ด true๊ฐ€ ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•จ

2. ํ•ต์‹ฌ ํ’€์ด

  1. ์น˜์ฆˆ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€ ํŒŒ์•…
static boolean check() {
	for(int i=0; i<n; i++) {
		for(int j=0; j<m; j++) {
			if(map[i][j] == 1)
				return false;
		}
	}
	return true;
}
  1. ์™ธ๋ถ€ ๊ณต๊ธฐ, ๋‚ด๋ถ€ ๊ณต๊ธฐ ๊ตฌ๋ณ„
static void OutsideAir() {
	Queue<Node> q = new LinkedList<>();
	q.add(new Node(0,0));
	visited[0][0] = true;
	map[0][0] = 9;
		
	while(!q.isEmpty()) {
		Node now = q.poll();
		for(int i=0; i<4; i++) {
			int nx = now.x + dx[i];
			int ny = now.y + dy[i];
				
			if(nx < 0 || ny<0 || nx>=n || ny>=m)
				continue;
			if(map[nx][ny] == 0 && visited[nx][ny] == false) {
				map[nx][ny] = 9;
				visited[nx][ny] = true;
				q.add(new Node(nx,ny));
			}
		}
	}		
}
  1. ์น˜์ฆˆ ๋…น์ด๊ธฐ
static void meltCheese() {
	for(int i=0; i<n; i++) {
		for(int j=0; j<m; j++) {
			int count = 0;
			if(map[i][j] == 1) {
				for(int k=0; k<4; k++) {
					int nx = i + dx[k];
					int ny = j + dy[k];
						
					if(nx < 0 || ny < 0 || nx>=n || ny>=m)
						continue;
						
					if(map[nx][ny] == 9)
						count++;
				}
					
				if(count >= 2) map[i][j] = 0;
			}
		}
	}
}
  1. ์ดˆ๊ธฐํ™”
static void init() {
	map[0][0] = 0;
	for(int i=0; i<n; i++) {
		for(int j=0; j<m; j++) {
			if(map[i][j] == 9)
				map[i][j] = 0;
			visited[i][j] = false;
		}
	}
}

3. ์ฝ”๋“œ

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Queue;
import java.util.LinkedList;
public class Bruteforce_3 {
	static int[][] map;
	static boolean[][] visited;
	static int[] dx = {0,0,1,-1};
	static int[] dy = {1,-1,0,0};
	static int n, m;
	static Queue<Node> entireQ = new LinkedList<>();
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String[] s = br.readLine().split(" ");
		int time = 0;
		
		n = Integer.parseInt(s[0]);
		m = Integer.parseInt(s[1]);
		map = new int[n][m];
		visited = new boolean[n][m];
		
		for(int i=0; i<n; i++) {
			s = br.readLine().split(" ");
			for(int j=0; j<m; j++) {
				map[i][j] = Integer.parseInt(s[j]);
			}
		}
		
		while(true) {

			if(check())
				break;
			
			OutsideAir();
			meltCheese();
			init();
			time++;
		}
		
		System.out.println(time);
		
	}

	static void OutsideAir() {
		Queue<Node> q = new LinkedList<>();
		q.add(new Node(0,0));
		visited[0][0] = true;
		map[0][0] = 9;
		
		while(!q.isEmpty()) {
			Node now = q.poll();
			for(int i=0; i<4; i++) {
				int nx = now.x + dx[i];
				int ny = now.y + dy[i];
				
				if(nx < 0 || ny<0 || nx>=n || ny>=m)
					continue;
				if(map[nx][ny] == 0 && visited[nx][ny] == false) {
					map[nx][ny] = 9;
					visited[nx][ny] = true;
					q.add(new Node(nx,ny));
				}
			}
		}
		
	}
	
	static void meltCheese() {
		for(int i=0; i<n; i++) {
			for(int j=0; j<m; j++) {
				int count = 0;
				if(map[i][j] == 1) {
					for(int k=0; k<4; k++) {
						int nx = i + dx[k];
						int ny = j + dy[k];
						
						if(nx < 0 || ny < 0 || nx>=n || ny>=m)
							continue;
						
						if(map[nx][ny] == 9)
							count++;
					}
					
					if(count >= 2) map[i][j] = 0;
				}
			}
		}
	}
	
	static boolean check() {
		for(int i=0; i<n; i++) {
			for(int j=0; j<m; j++) {
				if(map[i][j] == 1)
					return false;
			}
		}
		return true;
	}
	
	static void init() {
		map[0][0] = 0;
		for(int i=0; i<n; i++) {
			for(int j=0; j<m; j++) {
				if(map[i][j] == 9)
					map[i][j] = 0;
				visited[i][j] = false;
			}
		}
	}
	
	static class Node{
		int x;
		int y;
		Node(int x, int y){
			this.x = x;
			this.y = y;
		}
	}
}

4. ๊ฒฐ๊ณผ

์„ฑ๊ณตโœจ

profile
๐ŸŒฑ์ดˆ๋ณด ๊ฐœ๋ฐœ์ž๐ŸŒฑ

0๊ฐœ์˜ ๋Œ“๊ธ€