๐Ÿ“ ์•Œ๊ณ ๋ฆฌ์ฆ˜/GraphTraversal

[๋ฐฑ์ค€]3109๋ฒˆ ๋นต์ง‘(Java)

์ ์ด 2021. 8. 19. 13:55
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

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

 

3109๋ฒˆ: ๋นต์ง‘

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

www.acmicpc.net


ํ’€์ด

์•Œ๊ณ ๋ฆฌ์ฆ˜: ๋ฐฑํŠธ๋ž˜ํ‚น, DFS

0ํ–‰์—์„œ๋Š” ์•„๋ฌด๊ณณ์—์„œ๋‚˜ ์ถœ๋ฐœ ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ R๊ธธ์ด๋งŒํผ ๋Œ๋ฉฐ ๊นŠ์ด์šฐ์„ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‹คํ–‰ํ•œ๋‹ค.

ํƒ์ƒ‰์˜ ๊ธฐ์ €์กฐ๊ฑด์€ ํ˜„์žฌ Column์ด ๋งˆ์ง€๋ง‰ Column์ผ๋•Œ.

๊ทธ ์™ธ์—๋Š” ์‚ผ๋ฐฉํƒ์ƒ‰์„ ํ•˜์—ฌ ๊ฐˆ ๊ณณ์„ ์ •ํ•œ๋‹ค.

์ด ๋•Œ, ์ง€๋‚˜์˜จ ๊ณณ์€ 'O'๋กœ ํ‘œ์‹œํ•˜์—ฌ ๋‹ค์‹œ ์ง€๋‚˜๊ฐˆ ์ˆ˜ ์—†๊ฒŒ ํ•œ๋‹ค.

ํ•˜๋‚˜์˜ ํŒŒ์ดํ”„๋ผ์ธ์ด ๋งŒ๋“ค์–ด์กŒ์„ ๋•Œ(๊ธฐ์ €์กฐ๊ฑด) ํ•ด๋‹น ์นธ์—์„œ ๋‹ค์‹œ ํƒ์ƒ‰์ด ์ด๋ฃจ์–ด์ง€์ง€ ์•Š๋„๋ก Flag๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. (๋ฐฑํŠธ๋ž˜ํ‚น)

 

์‚ฌ์‹ค ์•„์ง ,, ๋ฐฑํŠธ๋ž˜ํ‚น ๊ฐœ๋…์„ ํ™•์‹คํžˆ ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค ,, ๋˜ ์ผ๋ฐ˜ ์กฐํ•ฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ž‘ DFS์ฐจ์ด๋„ ๋ชจ๋ฅด๊ฒ ๋‹ค ,, 

๊ฐˆ๊ธธ์ด ๋„ˆ๋ฌด ๋ฉ€๋‹ค,, เฎ‡เฏฐเฎ‡

 

์ฝ”๋“œ

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

public class Main{
	static int R, C, cnt;
	static char[][] map;		//๋งต ์ •๋ณด ์ €์žฅ
	static int[] di = {-1,0,1};		//์šฐ์ƒ, ์šฐ, ์šฐํ•˜
	static int[] dj = {1,1,1};
	static boolean flag = false;	//๋ฐฑํŠธ๋ž˜ํ‚น flag

	public static void main(String[] args) throws Exception{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		R = Integer.parseInt(st.nextToken());
		C = Integer.parseInt(st.nextToken());
		map = new char[R][C];
		cnt = 0;
		for(int i =0 ; i < R ; i++) {
			String str = br.readLine();
			for(int j =0 ; j < C ; j++) {
				map[i][j] = str.charAt(j);
			}
		}
		for(int i = 0 ; i< R ; i++) {		//0ํ–‰์—์„œ R-1ํ–‰๊นŒ์ง€ ํƒ์ƒ‰
			flag = false;		
			setPipe(i, 0);		//๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰
		}
		System.out.println(cnt);
	}
	
	private static void setPipe(int rowNo, int colNo) {
		if(colNo == C-1) {		//๊ธฐ์ €์กฐ๊ฑด
			map[rowNo][colNo] = 'O';	
			flag = true;	//ํ•ด๋‹น ๊ฒฝ๋กœ์—์„œ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜ ํƒ์ƒ‰์ด ์ข…๋ฃŒ๋˜์—ˆ์Œ์„ ์•Œ๋ฆผ
			cnt++;	
			return;
		}
		for(int i =0 ; i < 3 ; i++) {		//์‚ผ๋ฐฉํƒ์ƒ‰
			int ni = rowNo + di[i];
			int nj = colNo + dj[i];
			if(0<=ni&&ni<R && 0<=nj&&nj<C && map[ni][nj] == '.') {
				map[rowNo][colNo] = 'O';	
				setPipe(ni, nj);	//๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰
				if(flag) return;		//ํ•ด๋‹น ๊ฒฝ๋กœ์—์„œ ๋”์ด์ƒ ํƒ์ƒ‰ํ•˜์ง€ ์•Š๋„๋ก
			}
		}
	}
}

 

๋ฐ˜์‘ํ˜•