๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฐฑ์ค€

[๋ฐฑ์ค€ ์Šคํ„ฐ๋”” 0์ฃผ์ฐจ] 2644๋ฒˆ ์ดŒ์ˆ˜๊ณ„์‚ฐ ์‹ค๋ฒ„2 - ์ž๋ฐ”(JAVA)/ DFS/ ์ธ์ ‘ํ–‰๋ ฌ

๐Ÿ“‘ ๋ฌธ์ œ

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

 

2644๋ฒˆ: ์ดŒ์ˆ˜๊ณ„์‚ฐ

์‚ฌ๋žŒ๋“ค์€ 1, 2, 3, …, n (1 ≤ n ≤ 100)์˜ ์—ฐ์†๋œ ๋ฒˆํ˜ธ๋กœ ๊ฐ๊ฐ ํ‘œ์‹œ๋œ๋‹ค. ์ž…๋ ฅ ํŒŒ์ผ์˜ ์ฒซ์งธ ์ค„์—๋Š” ์ „์ฒด ์‚ฌ๋žŒ์˜ ์ˆ˜ n์ด ์ฃผ์–ด์ง€๊ณ , ๋‘˜์งธ ์ค„์—๋Š” ์ดŒ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•ด์•ผ ํ•˜๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ์‚ฌ๋žŒ์˜ ๋ฒˆํ˜ธ๊ฐ€ ์ฃผ์–ด

www.acmicpc.net

๋”๋ณด๊ธฐ
๋”๋ณด๊ธฐ

๋ฌธ์ œ

์šฐ๋ฆฌ ๋‚˜๋ผ๋Š” ๊ฐ€์กฑ ํ˜น์€ ์นœ์ฒ™๋“ค ์‚ฌ์ด์˜ ๊ด€๊ณ„๋ฅผ ์ดŒ์ˆ˜๋ผ๋Š” ๋‹จ์œ„๋กœ ํ‘œํ˜„ํ•˜๋Š” ๋…ํŠนํ•œ ๋ฌธํ™”๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ดŒ์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๊ณ„์‚ฐ๋œ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ถ€๋ชจ์™€ ์ž์‹ ์‚ฌ์ด๋ฅผ 1์ดŒ์œผ๋กœ ์ •์˜ํ•˜๊ณ  ์ด๋กœ๋ถ€ํ„ฐ ์‚ฌ๋žŒ๋“ค ๊ฐ„์˜ ์ดŒ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‚˜์™€ ์•„๋ฒ„์ง€, ์•„๋ฒ„์ง€์™€ ํ• ์•„๋ฒ„์ง€๋Š” ๊ฐ๊ฐ 1์ดŒ์œผ๋กœ ๋‚˜์™€ ํ• ์•„๋ฒ„์ง€๋Š” 2์ดŒ์ด ๋˜๊ณ , ์•„๋ฒ„์ง€ ํ˜•์ œ๋“ค๊ณผ ํ• ์•„๋ฒ„์ง€๋Š” 1์ดŒ, ๋‚˜์™€ ์•„๋ฒ„์ง€ ํ˜•์ œ๋“ค๊ณผ๋Š” 3์ดŒ์ด ๋œ๋‹ค.

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

 

์ž…๋ ฅ

์‚ฌ๋žŒ๋“ค์€ 1, 2, 3, …, n (1 ≤ n ≤ 100)์˜ ์—ฐ์†๋œ ๋ฒˆํ˜ธ๋กœ ๊ฐ๊ฐ ํ‘œ์‹œ๋œ๋‹ค. ์ž…๋ ฅ ํŒŒ์ผ์˜ ์ฒซ์งธ ์ค„์—๋Š” ์ „์ฒด ์‚ฌ๋žŒ์˜ ์ˆ˜ n์ด ์ฃผ์–ด์ง€๊ณ , ๋‘˜์งธ ์ค„์—๋Š” ์ดŒ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•ด์•ผ ํ•˜๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ์‚ฌ๋žŒ์˜ ๋ฒˆํ˜ธ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์…‹์งธ ์ค„์—๋Š” ๋ถ€๋ชจ ์ž์‹๋“ค ๊ฐ„์˜ ๊ด€๊ณ„์˜ ๊ฐœ์ˆ˜ m์ด ์ฃผ์–ด์ง„๋‹ค. ๋„ท์งธ ์ค„๋ถ€ํ„ฐ๋Š” ๋ถ€๋ชจ ์ž์‹๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋‘ ๋ฒˆํ˜ธ x,y๊ฐ€ ๊ฐ ์ค„์— ๋‚˜์˜จ๋‹ค. ์ด๋•Œ ์•ž์— ๋‚˜์˜ค๋Š” ๋ฒˆํ˜ธ x๋Š” ๋’ค์— ๋‚˜์˜ค๋Š” ์ •์ˆ˜ y์˜ ๋ถ€๋ชจ ๋ฒˆํ˜ธ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

๊ฐ ์‚ฌ๋žŒ์˜ ๋ถ€๋ชจ๋Š” ์ตœ๋Œ€ ํ•œ ๋ช…๋งŒ ์ฃผ์–ด์ง„๋‹ค.

 

์ถœ๋ ฅ

์ž…๋ ฅ์—์„œ ์š”๊ตฌํ•œ ๋‘ ์‚ฌ๋žŒ์˜ ์ดŒ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” ๋‘ ์‚ฌ๋žŒ์˜ ์นœ์ฒ™ ๊ด€๊ณ„๊ฐ€ ์ „ํ˜€ ์—†์–ด ์ดŒ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์—†์„ ๋•Œ๊ฐ€ ์žˆ๋‹ค. ์ด๋•Œ์—๋Š” -1์„ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค.

 

 

 

 

 

 

 

 

โœ’๏ธ ํ’€์ด

 โ—ป๏ธ ์ธ์ ‘๋ฆฌ์ŠคํŠธ๊ฐ€ ์•„๋‹Œ ์ธ์ ‘ํ–‰๋ ฌ๋กœ ํ‘ผ ๋ฌธ์ œ์ด๋‹ค.

 โ—ป๏ธ boolean[N+1][N+1] map: i๋ฒˆ ์‚ฌ๋žŒ๊ณผ j๋ฒˆ ์‚ฌ๋žŒ์˜ ์—ฐ๊ฒฐ์œ ๋ฌด๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฐ์—ด.

 โ—ป๏ธ ๊ด€๊ณ„๋ฅผ ์ฐพ์•„์•ผ ํ•˜๋Š” ๋‘ ์‚ฌ๋žŒ ์ค‘ ํ•œ ๋ช…์œผ๋กœ๋ถ€ํ„ฐ DFS ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•˜์—ฌ ๋ช‡ ๊ฐœ์˜ ๋…ธ๋“œ๋ฅผ ์ง€๋‚˜๊ฐ€๋Š”์ง€ ๊ฐœ์ˆ˜๋ฅผ ์นด์šดํŒ…ํ•œ๋‹ค. ํƒ์ƒ‰ ์ค‘ ๋‹ค๋ฅธ ํ•œ ์‚ฌ๋žŒ๊นŒ์ง€ ๋„๋‹ฌํ•˜๋ฉด ์นด์šดํŒ…ํ•œ ๊ฐ’์„ ๊ฒฐ๊ณผ๊ฐ’์— ๋„ฃ์–ด์ฃผ๊ณ  ํƒ์ƒ‰์„ ๋ฉˆ์ถ˜๋‹ค.

 โ—ป๏ธ ์˜ˆ๋ฅผ ๋“ค์–ด ๋‚˜>๋ถ€๋ชจ>ํ˜•์ œ ์ˆœ์œผ๋กœ ์ฐพ์•„๊ฐˆ ๋•Œ, ํ˜•์ œ์™€์˜ ์ดŒ์ˆ˜๋Š” ๋ถ€๋ชจ>ํ˜•์ œ์˜ ๋‹จ๊ณ„๋ฅผ ํ•ฉ์ณ 2๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 โ—ป๏ธ ๋ชจ๋“  ์—ฐ๊ฒฐ ๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰ํ•ด๋„ ๋ชฉํ‘œ์ธ ์‚ฌ๋žŒ์„ ์ฐพ์ง€ ๋ชปํ–ˆ๋‹ค๋ฉด ์ดŒ์ˆ˜๊ด€๊ณ„๊ฐ€ ์—†๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ ๊ฒฐ๊ณผ๊ฐ’์˜ ์ดˆ๊ธฐํ™”๊ฐ’์ธ -1์ด ์ถœ๋ ฅ๋œ๋‹ค.

 

 

 

 

 

 

 

๐Ÿ’ป ์†Œ์Šค์ฝ”๋“œ: ์ž๋ฐ”(Java)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

//DFS
public class Main_๋ฐฑ์ค€_2644_์ดŒ์ˆ˜๊ณ„์‚ฐ_์‹ค๋ฒ„2 {

	static int N, from, to, result=-1;
	static boolean[][] map;
	static boolean[] visited;
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = null;
		
		N = Integer.parseInt(br.readLine()); // ์‚ฌ๋žŒ์˜ ์ˆ˜
		st = new StringTokenizer(br.readLine());
		from = Integer.parseInt(st.nextToken());
		to = Integer.parseInt(st.nextToken());
		
		map = new boolean[N+1][N+1];
		int M = Integer.parseInt(br.readLine());
		for (int i = 0; i < M; i++) {
			st = new StringTokenizer(br.readLine());
			int v1 = Integer.parseInt(st.nextToken());//๋ถ€๋ชจ
			int v2 = Integer.parseInt(st.nextToken());//์ž์‹
			
			map[v1][v2]=map[v2][v1]=true;
		}//input
		
		visited = new boolean[N+1];
		dfs(from, 0);
		
		System.out.println(result);
	}//end of main

	private static void dfs(int p, int d) {
		
		//๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ
		visited[p] = true;
		
		//๋ชฉํ‘œ
		if(p==to) {
			result=d;
			return;
		}
		
		for (int i = 1; i <= N; i++) {
			if(map[p][i] && !visited[i]) dfs(i, d+1);
		}
	}//end of dfs
	
}//end of class

 

 

 

 

 

 

 

 

 

๐Ÿ’Ž ๐Ÿ’Ž ๐Ÿ’Ž

 

 

๏ผฐ๏ฝ๏ฝ“๏ฝ”๏ฝ…๏ฝ„ ๏ผข๏ฝ™ ๏ผณ๏ผก๏ผน

๐˜›๐˜ฉ๐˜ข๐˜ฏ๐˜ฌ๐˜ด ๐˜ง๐˜ฐ๐˜ณ ๐˜ณ๐˜ฆ๐˜ข๐˜ฅ๐˜ช๐˜ฏ๐˜จ