Algorithm/๋ฐฑ์ค€

๋ฐฑ์ค€ 16724๋ฒˆ : ํ”ผ๋ฆฌ ๋ถ€๋Š” ์‚ฌ๋‚˜์ด

giraffe_ 2023. 8. 29. 16:31

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

 

16724๋ฒˆ: ํ”ผ๋ฆฌ ๋ถ€๋Š” ์‚ฌ๋‚˜์ด

์ฒซ ๋ฒˆ์งธ ์ค„์— ์ง€๋„์˜ ํ–‰์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” N(1 ≤ N ≤ 1,000)๊ณผ ์ง€๋„์˜ ์—ด์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” M(1 ≤ M ≤ 1,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ์ง€๋„์˜ ์ •๋ณด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ธธ์ด๊ฐ€ M์ธ ๋ฌธ์ž์—ด์ด ์ฃผ

www.acmicpc.net

 

 

 

 

 

 

๋ฌธ์ œ

  • ์„ฑ์šฐ๊ฐ€ ์ •ํ•ด๋†“์€ ๋ฐฉํ–ฅ๋Œ€๋กœ ์›€์ง์ด๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค.
    • ๋ฐฉํ–ฅ์€ ์ด 4๊ฐ€์ง€๋กœ U, D, L, R์ด๊ณ  ๊ฐ๊ฐ ์œ„, ์•„๋ž˜, ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™
  • ์ง€๋„ ์–ด๋А ๊ตฌ์—ญ์— ์žˆ๋”๋ผ๋„ ์„ฑ์šฐ๊ฐ€ ํ”ผ๋ฆฌ๋ฅผ ๋ถˆ ๋•Œ ‘SAFE ZONE’์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ‘SAFE ZONE’์˜ ์ตœ์†Œ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅ

 

์ œํ•œ์‚ฌํ•ญ

  • N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 1,000)
  • ์ง€๋„ ๋ฐ–์œผ๋กœ ๋‚˜๊ฐ€๋Š” ๋ฐฉํ–ฅ์˜ ์ž…๋ ฅ์€ ์ฃผ์–ด์ง€์ง€ ์•Š๋Š”๋‹ค.

 

์ถœ์ฒ˜ : https://www.acmicpc.net/problem/16724

 

 

์˜ˆ์ œ ์ž…์ถœ๋ ฅ

์ž…๋ ฅ

3 4
DLLL
DRLU
RRRU

์ถœ๋ ฅ : 2

 

 

 

 

 

ํ’€์ด

  • DFS(๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰)

์„ค์ •ํ•œ ๋ฐฉํ–ฅ์— ๋”ฐ๋ผ ๊ณ„์† ์ด๋™ํ•˜๋ฏ€๋กœ ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰์„ DFS๋กœ ํ–ˆ๋‹ค. ํ•œ ์ ์„ ๊ธฐ์ค€์œผ๋กœ DFS ํƒ์ƒ‰์„ ํ•˜์—ฌ ํ•œ ์‚ฌ์ดํด์„ ๊ตฌํ•œ๋‹ค.

 

 

  • ์‚ฌ์ดํด ํŒŒ์•…ํ•˜๊ธฐ

 SAFE ZONE์€ ์‚ฌ์ดํด์ด ์‹œ์ž‘๋˜๋Š” ๋ฃจํŠธ ๋…ธํŠธ์— ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ง€์ ์— ๋Œ€ํ•ด ๊ณ„์† ๋ฐฉํ–ฅ๋Œ€๋กœ ํƒ์ƒ‰์„ ํ•˜์—ฌ ํƒ์ƒ‰์ด ๋๋‚˜๋ฉด SAFE ZONE์„ ์„ค์น˜ํ•˜๋„๋ก ํ–ˆ๋‹ค.

 

์ž…์ถœ๋ ฅ ์˜ˆ์‹œ

 

 

 ํ•˜์ง€๋งŒ ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๋‹ค๋ฅธ ์ง€์ ์—์„œ DFS ํƒ์ƒ‰์„ ํ–ˆ์„ ๋•Œ, ๊ฐ™์€ ์‚ฌ์ดํด์ธ ์ง€์ ์—์„œ ํƒ์ƒ‰์„ ๋๋‚ด๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค. ๊ฐ™์€ ์‚ฌ์ดํด์ด๋ฏ€๋กœ SAFE ZONE์„ ์„ค์น˜ํ•˜๋ฉด ์•ˆ๋œ๋‹ค. ์‚ฌ์ดํด์„ ์ƒˆ๋กœ ๋งŒ๋“œ๋Š” ๊ฑด์ง€ ์•„๋‹Œ์ง€ ๊ตฌ๋ถ„ํ•ด์ค„ ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

 

 

 

  • ๊ทธ๋ž˜ํ”„ ๋ฐฉ๋ฌธ ์ฒดํฌ : int 2์ฐจ์› ๋ฐฐ์—ด

์‚ฌ์ดํด์„ ์ƒˆ๋กœ ๋งŒ๋“œ๋Š” ๊ฑด์ง€ ์•„๋‹Œ์ง€ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด DFS ์‹œ์ž‘ํ•  ๋•Œ๋งˆ๋‹ค ์ƒˆ ๋ฒˆํ˜ธ๋ฅผ ๋ถ™์—ฌ ๋ฐฉ๋ฌธ ์ฒดํฌ๋ฅผ ํ•ด์ค€๋‹ค. DFS๊ฐ€ ์ข…๋ฃŒ๋  ์ง€์ ์˜ ๋ฒˆํ˜ธ๊ฐ€ ์‹œ์ž‘ํ•  ๋•Œ์˜ ๋ฒˆํ˜ธ์™€ ๊ฐ™๋‹ค๋ฉด ์ƒˆ๋กœ ์‚ฌ์ดํด์„ ์™„์„ฑํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๊ณ , ํ˜„์žฌ์˜ ๋ฒˆํ˜ธ์™€ ๋‹ค๋ฅด๋‹ค๋ฉด ์ด์ „์— ์ด๋ฏธ ๋งŒ๋“  ์‚ฌ์ดํด์ธ ๊ฒƒ์ด๋‹ค.

 

์ƒˆ๋กœ ์‚ฌ์ดํด ํ˜•์„ฑํ•˜๋Š” ๊ฒฝ์šฐ

 

๊ธฐ์กด ์‚ฌ์ดํด์ธ ๊ฒฝ์šฐ

 

 

 

 

 

์ฝ”๋“œ

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

public class BOJ_ํ”ผ๋ฆฌ๋ถ€๋Š”์‚ฌ๋‚˜์ด {
	static int N, M;
	static char[][] graph;
	static int[][] visited;
	static int[] dx = {-1, 1, 0, 0}; //U, D, L, R
	static int[] dy = {0, 0, -1, 1};
	static int count;

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		StringTokenizer st = new StringTokenizer(br.readLine(),  " ");

		N = Integer.parseInt(st.nextToken()); //ํ–‰์˜ ์ˆ˜
		M = Integer.parseInt(st.nextToken()); //์—ด์˜ ์ˆ˜
		
		graph = new char[N][M];
		
		for(int i = 0; i < N; i++) {
			char[] chArr = br.readLine().toCharArray();
			
			for(int j = 0; j < M; j++) {
				graph[i][j] = chArr[j];
			}
		}
		
		//ํƒ์ƒ‰
		visited = new int[N][M]; //๋ฐฉ๋ฌธ ํ‘œ์‹œ : 0(๋ฐฉ๋ฌธX), 1์ด์ƒ(๋ฐฉ๋ฌธO)
		count = 0; //์ •๋‹ต : SAFE ZONE์˜ ์ตœ์†Œ ๊ฐœ์ˆ˜
		int idx = 0; //ํƒ์ƒ‰ ์ธ๋ฑ์Šค
		
		for(int i = 0; i < N; i++) {
			for(int j = 0; j < M; j++) {
				if(visited[i][j] == 0) { //๋ฐฉ๋ฌธํ•œ ์  ์—†์œผ๋ฉด
					dfs(i, j, ++idx); //ํƒ์ƒ‰
				}
			}
		}
		
		//์ถœ๋ ฅ
		System.out.println(count);
	}

	public static void dfs(int x, int y, int idx) {
		visited[x][y] = idx;
		
		int nx = x; //๋‹ค์Œ ์ด๋™ ํ–‰
		int ny = y; //๋‹ค์Œ ์ด๋™ ์—ด
		
		switch(graph[x][y]) {
			case 'U' :
				nx += dx[0];
				ny += dy[0];
				break;
			case 'D' :
				nx += dx[1];
				ny += dy[1];
				break;
			case 'L' :
				nx += dx[2];
				ny += dy[2];
				break;
			case 'R' :
				nx += dx[3];
				ny += dy[3];
				break;
		}
		
		if(0 <= nx && nx < N && 0 <= ny && ny < M) {
			if(visited[nx][ny] == 0) { //๋ฐฉ๋ฌธํ•œ ์  ์—†์Œ
				dfs(nx, ny, idx);
			} else { //๋ฐฉ๋ฌธํ•œ ์  ์žˆ์Œ
				if(visited[nx][ny] == idx) { //์‚ฌ์ดํด ์ƒˆ๋กœ ์™„์„ฑ
					count++;
					return;
				}
				//ํ˜„์žฌ์˜ ์ธ๋ฑ์Šค์™€ ๋‹ค๋ฆ„(=์ด์ „์— ๋งŒ๋“  ์‚ฌ์ดํด)
			}
		}
	}

}

 

 

 

 

 

๊ฒฐ๊ณผ

 

 

 

 

 

๋ฐฐ์šด์ 

  • visited ๋ฐฐ์—ด์„ intํ˜•์œผ๋กœ ํ•ด์„œ ๊ตฌ์—ญ(์‚ฌ์ดํด)์„ ๊ตฌ๋ณ„ํ•˜๊ธฐ