Algorithm/๋ฌธ์ œํ’€์ด

[๋ฐฑ์ค€] 13023๋ฒˆ - ABCDE (C++)

moaoh 2023. 9. 22. 20:40

 

13023๋ฒˆ: ABCDE

๋ฌธ์ œ์˜ ์กฐ๊ฑด์— ๋งž๋Š” A, B, C, D, E๊ฐ€ ์กด์žฌํ•˜๋ฉด 1์„ ์—†์œผ๋ฉด 0์„ ์ถœ๋ ฅํ•œ๋‹ค.

www.acmicpc.net

๋ฌธ์ œ

BOJ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์บ ํ”„์—๋Š” ์ด N๋ช…์ด ์ฐธ๊ฐ€ํ•˜๊ณ  ์žˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์€ 0๋ฒˆ๋ถ€ํ„ฐ N-1๋ฒˆ์œผ๋กœ ๋ฒˆํ˜ธ๊ฐ€ ๋งค๊ฒจ์ ธ ์žˆ๊ณ , ์ผ๋ถ€ ์‚ฌ๋žŒ๋“ค์€ ์นœ๊ตฌ์ด๋‹ค.

์˜ค๋Š˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์นœ๊ตฌ ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง„ ์‚ฌ๋žŒ A, B, C, D, E๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ๊ตฌํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

  • A๋Š” B์™€ ์นœ๊ตฌ๋‹ค.
  • B๋Š” C์™€ ์นœ๊ตฌ๋‹ค.
  • C๋Š” D์™€ ์นœ๊ตฌ๋‹ค.
  • D๋Š” E์™€ ์นœ๊ตฌ๋‹ค.

์œ„์™€ ๊ฐ™์€ ์นœ๊ตฌ ๊ด€๊ณ„๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ์•ˆํ•˜๋Š”์ง€ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

 

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์‚ฌ๋žŒ์˜ ์ˆ˜ N (5 ≤ N ≤ 2000)๊ณผ ์นœ๊ตฌ ๊ด€๊ณ„์˜ ์ˆ˜ M (1 ≤ M ≤ 2000)์ด ์ฃผ์–ด์ง„๋‹ค.

๋‘˜์งธ ์ค„๋ถ€ํ„ฐ M๊ฐœ์˜ ์ค„์—๋Š” ์ •์ˆ˜ a์™€ b๊ฐ€ ์ฃผ์–ด์ง€๋ฉฐ, a์™€ b๊ฐ€ ์นœ๊ตฌ๋ผ๋Š” ๋œป์ด๋‹ค. (0 ≤ a, b ≤ N-1, a ≠ b) ๊ฐ™์€ ์นœ๊ตฌ ๊ด€๊ณ„๊ฐ€ ๋‘ ๋ฒˆ ์ด์ƒ ์ฃผ์–ด์ง€๋Š” ๊ฒฝ์šฐ๋Š” ์—†๋‹ค.

 

 

์ถœ๋ ฅ

๋ฌธ์ œ์˜ ์กฐ๊ฑด์— ๋งž๋Š” A, B, C, D, E๊ฐ€ ์กด์žฌํ•˜๋ฉด 1์„ ์—†์œผ๋ฉด 0์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

ํ’€์ด๊ณผ์ •

  • vector node : ์‹ค์งˆ์ ์œผ๋กœ ๋…ธ๋“œ๊ฐ„์˜ ๊ฐ„์„ ์ •๋ณด๊ฐ€ ๋‹ด๊ธฐ๋Š” ๋ถ€๋ถ„
  • bool visited : ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ์ธ์ง€ ์•„๋‹Œ์ง€ ํ™•์ธํ•˜๋Š” ๋ถ€๋ถ„
  • flag : 5๋ช…์ด ์ผ์ž๋กœ ์—ฐ๊ฒฐ๋œ ๊ฒฝ์šฐ๋ฅผ ํ™•์ธํ•ด์ฃผ๋Š” ํŒŒํŠธ

 

dfs์™€ cktracking ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋…ธ๋“œ๋ฅผ ์ด๋ฏธ ๋ฐฉ๋ฌธํ–ˆ๋Š”๋ฐ ๋Œ์•„๊ฐ€์•ผํ•˜๋Š” ๊ฒฝ์šฐ visitied๋ฅผ false๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐ.

 

code

#include <iostream>
#include <vector>
#include <stack>

std::vector <int> node[2001];
bool visited[2001];
bool flag;

void	dfs(int cnt, int n, int count)
{
	if (flag) return ;
	if (count == 5 && !flag)
		flag = true;
	visited[cnt] = true;
	for (int i = 0; i < node[cnt].size(); i++) {
		int next = node[cnt][i];
		if (!visited[next]) {
			dfs(next, n, count + 1);
		}
	}
	visited[cnt] = false;
}

int		main(void)
{
	int n, m, a, b;

	std::cin >> n >> m;
	for (int i = 0; i < m; i++) {
		std::cin >> a >> b;
		node[a].push_back(b);
		node[b].push_back(a);
	}
	for (int i = 0; i < n; i++) {
		dfs(i, n, 1);
	}
	if (flag) std::cout << "1" << "\n";
	else std::cout << "0" << "\n";

	return (0);
}

 

ํ›„๊ธฐ

์ƒ๋‹นํžˆ ์–ด๋ ต๋‹ค. ๋‚˜์ค‘์— ๋‹ค์‹œ ๋„์ „ํ•ด๋ด์•ผํ•  ๋ฌธ์ œ