[Algorithm] ๐Ÿž๋ฐฑ์ค€ 3109 ๋นต์ง‘

HaJingJingยท2021๋…„ 8์›” 28์ผ
0

Algorithm

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

0. ๋ฌธ์ œ

์œ ๋ช…ํ•œ ์ œ๋นต์‚ฌ ๊น€์›์›…์€ ๋นต์ง‘์„ ์šด์˜ํ•˜๊ณ  ์žˆ๋‹ค. ์›์›…์ด์˜ ๋นต์ง‘์€ ๊ธ€๋กœ๋ฒŒ ์žฌ์ • ์œ„๊ธฐ๋ฅผ ํ”ผํ•ด๊ฐ€์ง€ ๋ชปํ–ˆ๊ณ , ๊ฒฐ๊ตญ ์‹ฌ๊ฐํ•œ ์žฌ์ • ์œ„๊ธฐ์— ๋น ์กŒ๋‹ค.

์›์›…์ด๋Š” ์ง€์ถœ์„ ์ค„์ด๊ณ ์ž ์—ฌ๊ธฐ์ €๊ธฐ ์ง€์ถœ์„ ์‚ดํŽด๋ณด๋˜ ์ค‘์—, ๊ฐ€์Šค๋น„๊ฐ€ ์ œ์ผ ํฌ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ๋˜์—ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์›์›…์ด๋Š” ๊ทผ์ฒ˜ ๋นต์ง‘์˜ ๊ฐ€์Šค๊ด€์— ๋ชฐ๋ž˜ ํŒŒ์ดํ”„๋ฅผ ์„ค์น˜ํ•ด ํ›”์ณ์„œ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

๋นต์ง‘์ด ์žˆ๋Š” ๊ณณ์€ R*C ๊ฒฉ์ž๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฒซ์งธ ์—ด์€ ๊ทผ์ฒ˜ ๋นต์ง‘์˜ ๊ฐ€์Šค๊ด€์ด๊ณ , ๋งˆ์ง€๋ง‰ ์—ด์€ ์›์›…์ด์˜ ๋นต์ง‘์ด๋‹ค.

์›์›…์ด๋Š” ๊ฐ€์Šค๊ด€๊ณผ ๋นต์ง‘์„ ์—ฐ๊ฒฐํ•˜๋Š” ํŒŒ์ดํ”„๋ฅผ ์„ค์น˜ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ๋นต์ง‘๊ณผ ๊ฐ€์Šค๊ด€ ์‚ฌ์ด์—๋Š” ๊ฑด๋ฌผ์ด ์žˆ์„ ์ˆ˜๋„ ์žˆ๋‹ค. ๊ฑด๋ฌผ์ด ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ํŒŒ์ดํ”„๋ฅผ ๋†“์„ ์ˆ˜ ์—†๋‹ค.

๊ฐ€์Šค๊ด€๊ณผ ๋นต์ง‘์„ ์—ฐ๊ฒฐํ•˜๋Š” ๋ชจ๋“  ํŒŒ์ดํ”„๋ผ์ธ์€ ์ฒซ์งธ ์—ด์—์„œ ์‹œ์ž‘ํ•ด์•ผ ํ•˜๊ณ , ๋งˆ์ง€๋ง‰ ์—ด์—์„œ ๋๋‚˜์•ผ ํ•œ๋‹ค. ๊ฐ ์นธ์€ ์˜ค๋ฅธ์ชฝ, ์˜ค๋ฅธ์ชฝ ์œ„ ๋Œ€๊ฐ์„ , ์˜ค๋ฅธ์ชฝ ์•„๋ž˜ ๋Œ€๊ฐ์„ ์œผ๋กœ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๊ณ , ๊ฐ ์นธ์˜ ์ค‘์‹ฌ๋ผ๋ฆฌ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์›์›…์ด๋Š” ๊ฐ€์Šค๋ฅผ ๋˜๋„๋ก ๋งŽ์ด ํ›”์น˜๋ ค๊ณ  ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ, ๊ฐ€์Šค๊ด€๊ณผ ๋นต์ง‘์„ ์—ฐ๊ฒฐํ•˜๋Š” ํŒŒ์ดํ”„๋ผ์ธ์„ ์—ฌ๋Ÿฌ ๊ฐœ ์„ค์น˜ํ•  ๊ฒƒ์ด๋‹ค. ์ด ๊ฒฝ๋กœ๋Š” ๊ฒน์น  ์ˆ˜ ์—†๊ณ , ์„œ๋กœ ์ ‘ํ•  ์ˆ˜๋„ ์—†๋‹ค. ์ฆ‰, ๊ฐ ์นธ์„ ์ง€๋‚˜๋Š” ํŒŒ์ดํ”„๋Š” ํ•˜๋‚˜์ด์–ด์•ผ ํ•œ๋‹ค.

์›์›…์ด ๋นต์ง‘์˜ ๋ชจ์Šต์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ์›์›…์ด๊ฐ€ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์Šค๊ด€๊ณผ ๋นต์ง‘์„ ์—ฐ๊ฒฐํ•˜๋Š” ํŒŒ์ดํ”„๋ผ์ธ์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ
์ฒซ์งธ ์ค„์— R๊ณผ C๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 โ‰ค R โ‰ค 10,000, 5 โ‰ค C โ‰ค 500)

๋‹ค์Œ R๊ฐœ ์ค„์—๋Š” ๋นต์ง‘ ๊ทผ์ฒ˜์˜ ๋ชจ์Šต์ด ์ฃผ์–ด์ง„๋‹ค. '.'๋Š” ๋นˆ ์นธ์ด๊ณ , 'x'๋Š” ๊ฑด๋ฌผ์ด๋‹ค. ์ฒ˜์Œ๊ณผ ๋งˆ์ง€๋ง‰ ์—ด์€ ํ•ญ์ƒ ๋น„์–ด์žˆ๋‹ค.

์ถœ๋ ฅ
์ฒซ์งธ ์ค„์— ์›์›…์ด๊ฐ€ ๋†“์„ ์ˆ˜ ์žˆ๋Š” ํŒŒ์ดํ”„๋ผ์ธ์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

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

๐Ÿ’ก ์ „ํ˜•์ ์ธ ๋ฐฑํŠธ๋ž˜ํ‚น
๐Ÿ’ก dfs๋กœ ํŒŒ์ดํ”„๋ฅผ ๋ชจ๋“  ๊ฒฝ์šฐ ํƒ์ƒ‰ํ•ด์•ผํ•จ
๐Ÿ’ก ์ด๋ฏธ ๋ฐฉ๋ฌธํ•œ ๊ณณ์„ x๋กœ ๋ฐ”๊ฟ” ๊ฐ€์ง€ ๋ชปํ•˜๊ฒŒ ํ•จ (๊ธฐ์กด์˜ visited๋ž‘ ๋น„์Šทํ•œ ์—ญํ• )
๐Ÿ’ก boolean ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•ด ์ด๋ฏธ ํŒŒ์ดํ”„๊ฐ€ ์žˆ๋Š” ๊ณณ์—์„œ ๋‹ค๋ฅธ ๊ณณ์œผ๋กœ ํŒŒ์ƒ๋˜๋Š” ๊ธธ์„ ๋ง‰์•„์•ผํ•จ

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

  1. ๋ฐฑํŠธ๋ž˜ํ‚น
if(col == c-1) {
	connect = true;
	cnt++;
	return;
}
  1. ์ด๋ฏธ ๋ฐฉ๋ฌธํ•œ ๊ณณ์„ x๋กœ ๋ฐ”๊ฟ” ๊ฐ€์ง€ ๋ชปํ•˜๊ฒŒ ํ•จ
map[row][col] = 'x';
  1. boolean ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•ด ์ด๋ฏธ ํŒŒ์ดํ”„๊ฐ€ ์žˆ๋Š” ๊ณณ์—์„œ ๋‹ค๋ฅธ ๊ณณ์œผ๋กœ ํŒŒ์ƒ๋˜๋Š” ๊ธธ์„ ๋ง‰์•„์•ผํ•จ
if(connect) {
	return;
}

3. ์ฝ”๋“œ

import java.io.*;

public class BOJ_3109 {
	static char[][] map;
	static int r, c, cnt = 0;
	static int[] dr = {-1,0,1};
	static boolean connect;
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		String[] s = br.readLine().split(" ");
		
		r = Integer.parseInt(s[0]);
		c = Integer.parseInt(s[1]);
		map = new char[r][c];
		
		for(int i=0; i<r; i++) {
			map[i] = br.readLine().toCharArray();
		}
		
		for(int i=0; i<r; i++) {
			connect = false;
			dfs(i, 0);
		}
		
		StringBuilder sb = new StringBuilder();
		sb.append(cnt);
		bw.write(sb.toString());
		bw.flush();
	}
	
	static void dfs(int row, int col) {
		if(col == c-1) {
			connect = true;
			cnt++;
			return;
		}
		
		for(int i=0; i<3; i++) {
			int nc = col + 1;
			int nr = row + dr[i];
			
			if(nr < 0 || nr >= r || nc < 0 || nc >= c)
				continue;
			
			if(map[nr][nc] == '.') {
				map[row][col] = 'x';
				dfs(nr, nc);
				if(connect) {
					return;
				}
			}
		}
	}

}

4. ๊ฒฐ๊ณผ

์„ฑ๊ณตโœจ

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

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