[Algorithm] ๐Ÿฉธ๋ฐฑ์ค€ 2644 ์ดŒ์ˆ˜ ๊ณ„์‚ฐ

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

Algorithm

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

0. ๋ฌธ์ œ

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

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

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

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

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

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

๐Ÿ’ก ์ง์ ‘์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค๋ผ๋ฆฌ +1์„ ํ•จ
๐Ÿ’ก ์ด๋ฏธ ํ•œ ์‚ฌ๋žŒ์„ ์ œ์™ธ์‹œ์ผœ stackoverflow๊ฐ€ ๋‚˜์ง€ ์•Š๊ฒŒ ํ•จ
๐Ÿ’ก ์ฐพ๊ณ ์ž ํ•˜๋Š” ์‚ฌ๋žŒ์„ ๋ฐœ๊ฒฌํ–ˆ์„ ๋•Œ, ์ „์—ญ๋ณ€์ˆ˜์— ์ง€์—ญ๋ณ€์ˆ˜๋ฅผ ๋„ฃ๊ณ  return

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

  1. ์ง์ ‘์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค๋ผ๋ฆฌ +1์„ ํ•จ
for(int i=0; i<n; i++) {
	for(int j=0; j<n; j++) {
		if(map[i][j] == 1 && visited[i][j] == false) {
			ret.add(bfs(i,j));
			group++;
		}
	}
}
  1. ์ด๋ฏธ ํ•œ ์‚ฌ๋žŒ์„ ์ œ์™ธ์‹œ์ผœ stackoverflow๊ฐ€ ๋‚˜์ง€ ์•Š๊ฒŒ ํ•จ
for (int target : relation[x]) {
	if (!visited[target]) {
		visited[target] = true;
		dfs(target, cnt + 1);
	}
}
  1. ์ฐพ๊ณ ์ž ํ•˜๋Š” ์‚ฌ๋žŒ์„ ๋ฐœ๊ฒฌํ–ˆ์„ ๋•Œ, ์ „์—ญ๋ณ€์ˆ˜์— ์ง€์—ญ๋ณ€์ˆ˜๋ฅผ ๋„ฃ๊ณ  return
if (x == b) {
	count = cnt;
	return;
}

3. ์ฝ”๋“œ

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

public class Bruteforce_9 {
	static List<Integer>[] relation;
	static boolean[] visited;
	static int a, b, count = 0;

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int n = Integer.parseInt(br.readLine());

		String[] s = br.readLine().split(" ");
		a = Integer.parseInt(s[0]);
		b = Integer.parseInt(s[1]);

		int m = Integer.parseInt(br.readLine());
		relation = new ArrayList[n + 1];
		visited = new boolean[n + 1];

		for (int i = 1; i < n + 1; i++)
			relation[i] = new ArrayList<Integer>();

		for (int i = 0; i < m; i++) {
			s = br.readLine().split(" ");
			int parent = Integer.parseInt(s[0]);
			int child = Integer.parseInt(s[1]);
			relation[parent].add(child);
			relation[child].add(parent);
		}
		dfs(a, 0);
		visited[a] = true;

		System.out.println(count == 0 ? -1 : count);
	}

	static void dfs(int x, int cnt) {
		if (x == b) {
			count = cnt;
			return;
		}

		for (int target : relation[x]) {
			if (!visited[target]) {
				visited[target] = true;
				dfs(target, cnt + 1);
			}
		}

	}

}

4. ๊ฒฐ๊ณผ

์„ฑ๊ณตโœจ

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

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