[Algorithm] ๐Ÿฅ—๋ฐฑ์ค€ ์Œ์‹๋ฌผ ํ”ผํ•˜๊ธฐ

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

Algorithm

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

0. ๋ฌธ์ œ

์ฝ”๋ ˆ์Šค์ฝ” ์ฝ˜๋„๋ฏธ๋‹ˆ์—„ 8์ธต์€ ํ•™์ƒ๋“ค์ด 3๋ผ์˜ ์‹์‚ฌ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ณต๊ฐ„์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ช‡๋ช‡ ๋น„์–‘์‹ฌ์ ์ธ ํ•™์ƒ๋“ค์˜ ๋งŒํ–‰์œผ๋กœ ์Œ์‹๋ฌผ์ด ํ†ต๋กœ ์ค‘๊ฐ„ ์ค‘๊ฐ„์— ๋–จ์–ด์ ธ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ์Œ์‹๋ฌผ๋“ค์€ ๊ทผ์ฒ˜์— ์žˆ๋Š” ๊ฒƒ๋ผ๋ฆฌ ๋ญ‰์น˜๊ฒŒ ๋ผ์„œ ํฐ ์Œ์‹๋ฌผ ์“ฐ๋ ˆ๊ธฐ๊ฐ€ ๋œ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ์ถœ์ œํ•œ ์„ ์ƒ๋‹˜์€ ๊ฐœ์ธ์ ์œผ๋กœ ์ด๋Ÿฌํ•œ ์Œ์‹๋ฌผ์„ ์‹ค๋‚ดํ™”์— ๋ฌปํžˆ๋Š” ๊ฒƒ์„ ์ •๋ง ์ง„์ •์œผ๋กœ ์‹ซ์–ดํ•œ๋‹ค. ์ฐธ๊ณ ๋กœ ์šฐ๋ฆฌ๊ฐ€ ๊ตฌํ•ด์•ผ ํ•  ๋‹ต์€ ์ด ๋ฌธ์ œ๋ฅผ ๋‚ธ ์กฐ๊ต๋ฅผ ๋งž์ถ”๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค.

ํ†ต๋กœ์— ๋–จ์–ด์ง„ ์Œ์‹๋ฌผ์„ ํ”ผํ•ด๊ฐ€๊ธฐ๋ž€ ์‰ฌ์šด ์ผ์ด ์•„๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์„ ์ƒ๋‹˜์€ ๋–จ์–ด์ง„ ์Œ์‹๋ฌผ ์ค‘์— ์ œ์ผ ํฐ ์Œ์‹๋ฌผ๋งŒ์€ ํ”ผํ•ด ๊ฐ€๋ ค๊ณ  ํ•œ๋‹ค.

์„ ์ƒ๋‹˜์„ ๋„์™€ ์ œ์ผ ํฐ ์Œ์‹๋ฌผ์˜ ํฌ๊ธฐ๋ฅผ ๊ตฌํ•ด์„œ โ€œ10ra"๋ฅผ ์™ธ์น˜์ง€ ์•Š๊ฒŒ ๋„์™€์ฃผ์ž.

์ž…๋ ฅ
์ฒซ์งธ ์ค„์— ํ†ต๋กœ์˜ ์„ธ๋กœ ๊ธธ์ด N(1 โ‰ค N โ‰ค 100)๊ณผ ๊ฐ€๋กœ ๊ธธ์ด M(1 โ‰ค M โ‰ค 100) ๊ทธ๋ฆฌ๊ณ  ์Œ์‹๋ฌผ ์“ฐ๋ ˆ๊ธฐ์˜ ๊ฐœ์ˆ˜ K(1 โ‰ค K โ‰ค 10,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ K๊ฐœ์˜ ์ค„์— ์Œ์‹๋ฌผ์ด ๋–จ์–ด์ง„ ์ขŒํ‘œ (r, c)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.

์ขŒํ‘œ (r, c)์˜ r์€ ์œ„์—์„œ๋ถ€ํ„ฐ, c๋Š” ์™ผ์ชฝ์—์„œ๋ถ€ํ„ฐ๊ฐ€ ๊ธฐ์ค€์ด๋‹ค.

์ถœ๋ ฅ
์ฒซ์งธ ์ค„์— ์Œ์‹๋ฌผ ์ค‘ ๊ฐ€์žฅ ํฐ ์Œ์‹๋ฌผ์˜ ํฌ๊ธฐ๋ฅผ ์ถœ๋ ฅํ•˜๋ผ.

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

๐Ÿ’ก DFS
๐Ÿ’ก ์Œ์‹๋ฌผ ์“ฐ๋ ˆ๊ธฐ๊ฐ€ ์žˆ๋Š” ๊ณณ์„ ํ‘œ์‹œํ•จ
๐Ÿ’ก ์ „์ฒด ๋ฐฐ์—ด์—์„œ ์“ฐ๋ ˆ๊ธฐ๊ฐ€ ์žˆ๋Š” ๊ณณ์„ ์„ ํƒํ•˜๊ณ  ์ƒํ•˜์ขŒ์šฐ์—๋„ ์“ฐ๋ ˆ๊ธฐ๊ฐ€ ์žˆ์œผ๋ฉด count๋ฅผ ํ•˜๊ณ  ์“ฐ๋ ˆ๊ธฐ๊ฐ€ ์žˆ๋Š” ์ž๋ฆฌ๋กœ ๋„˜์–ด๊ฐ
๐Ÿ’ก ์“ฐ๋ ˆ๊ธฐ๊ฐ€ ์žˆ๋Š” ์ž๋ฆฌ๊ฐ€ ์ด์–ด์ง€์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋‹ค์‹œ ๋Œ์•„์™€ ์ „์ฒด ๋ฐฐ์—ด์„ ํƒ์ƒ‰ํ•˜์—ฌ ์“ฐ๋ ˆ๊ธฐ๊ฐ€ ์žˆ๋Š” ๊ณณ์„ ์ฐพ์•„๋‚ด์–ด ์œ„์˜ ์ฝ”๋“œ๋ฅผ ๋ฐ˜๋ณตํ•จ

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

1) ์Œ์‹๋ฌผ ์“ฐ๋ ˆ๊ธฐ๊ฐ€ ์žˆ๋Š” ๊ณณ์„ ํ‘œ์‹œํ•จ

for(int i=0; i<k; i++) {
	s = br.readLine().split(" ");
	map[Integer.parseInt(s[0])][Integer.parseInt(s[1])] = trash;
}

2) ์ „์ฒด ๋ฐฐ์—ด์—์„œ ์“ฐ๋ ˆ๊ธฐ๊ฐ€ ์žˆ๋Š” ๊ณณ์„ ์„ ํƒํ•˜๊ณ  ์ƒํ•˜์ขŒ์šฐ์—๋„ ์“ฐ๋ ˆ๊ธฐ๊ฐ€ ์žˆ์œผ๋ฉด count๋ฅผ ํ•˜๊ณ  ์“ฐ๋ ˆ๊ธฐ๊ฐ€ ์žˆ๋Š” ์ž๋ฆฌ๋กœ ๋„˜์–ด๊ฐ

for(int i=0; i<4; i++) {
	int nx = x + dx[i];
	int ny = y + dy[i];
			
	if(nx < 1 || ny < 1 || nx>=n+1 || ny>=m+1)
		continue;
			
	if(!visited[nx][ny] && map[nx][ny] == trash) {
		visited[nx][ny] = true;
		dfs(nx,ny);
	}
}

3) ์“ฐ๋ ˆ๊ธฐ๊ฐ€ ์žˆ๋Š” ์ž๋ฆฌ๊ฐ€ ์ด์–ด์ง€์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋‹ค์‹œ ๋Œ์•„์™€ ์ „์ฒด ๋ฐฐ์—ด์„ ํƒ์ƒ‰ํ•˜์—ฌ ์“ฐ๋ ˆ๊ธฐ๊ฐ€ ์žˆ๋Š” ๊ณณ์„ ์ฐพ์•„๋‚ด์–ด ์œ„์˜ ์ฝ”๋“œ๋ฅผ ๋ฐ˜๋ณตํ•จ

for(int i=1; i<n+1; i++) {
	for(int j=1; j<m+1; j++) {
		if(map[i][j] == trash) {
			visited[i][j] = true;
			dfs(i,j);
			max = Math.max(count, max);
			count = 0;
		}
	}
}

3. ์ฝ”๋“œ

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.List;
import java.util.ArrayList;

public class Bruteforce_7 {
	static final int trash = 1;
	static int n,m,k, count = 0;
	static int[][] map;
	static boolean[][] visited;
	static int[] dx = {-1,1,0,0};
	static int[] dy = {0,0,-1,1};
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String[] s = br.readLine().split(" ");
		
		n = Integer.parseInt(s[0]);
		m = Integer.parseInt(s[1]);
		k = Integer.parseInt(s[2]);
		
		map = new int[n+1][m+1];
		visited = new boolean[n+1][m+1];
		
		for(int i=0; i<k; i++) {
			s = br.readLine().split(" ");
			map[Integer.parseInt(s[0])][Integer.parseInt(s[1])] = trash;
		}
		
		int max = 0;
		for(int i=1; i<n+1; i++) {
			for(int j=1; j<m+1; j++) {
				if(map[i][j] == trash) {
					visited[i][j] = true;
					dfs(i,j);
					max = Math.max(count, max);
					count = 0;
				}
			}
		}
		
		System.out.println(max);
		
	}
	
	public static void dfs(int x, int y) {
		count++;
		
		for(int i=0; i<4; i++) {
			int nx = x + dx[i];
			int ny = y + dy[i];
			
			if(nx < 1 || ny < 1 || nx>=n+1 || ny>=m+1)
				continue;
			
			if(!visited[nx][ny] && map[nx][ny] == trash) {
				visited[nx][ny] = true;
				dfs(nx,ny);
			}
		}
	}

}

4. ๊ฒฐ๊ณผ

์„ฑ๊ณตโœจ

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

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