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

[๋ฐฑ์ค€] 1043๋ฒˆ - ๊ฑฐ์ง“๋ง (C++)

moaoh 2023. 8. 22. 17:52

 

1043๋ฒˆ: ๊ฑฐ์ง“๋ง

์ง€๋ฏผ์ด๋Š” ํŒŒํ‹ฐ์— ๊ฐ€์„œ ์ด์•ผ๊ธฐ ํ•˜๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•œ๋‹ค. ํŒŒํ‹ฐ์— ๊ฐˆ ๋•Œ๋งˆ๋‹ค, ์ง€๋ฏผ์ด๋Š” ์ง€๋ฏผ์ด๊ฐ€ ๊ฐ€์žฅ ์ข‹์•„ํ•˜๋Š” ์ด์•ผ๊ธฐ๋ฅผ ํ•œ๋‹ค. ์ง€๋ฏผ์ด๋Š” ๊ทธ ์ด์•ผ๊ธฐ๋ฅผ ๋งํ•  ๋•Œ, ์žˆ๋Š” ๊ทธ๋Œ€๋กœ ์ง„์‹ค๋กœ ๋งํ•˜๊ฑฐ๋‚˜ ์—„์ฒญ๋‚˜๊ฒŒ

www.acmicpc.net

 

 

 

๋ฌธ์ œ

์ง€๋ฏผ์ด๋Š” ํŒŒํ‹ฐ์— ๊ฐ€์„œ ์ด์•ผ๊ธฐ ํ•˜๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•œ๋‹ค. ํŒŒํ‹ฐ์— ๊ฐˆ ๋•Œ๋งˆ๋‹ค, ์ง€๋ฏผ์ด๋Š” ์ง€๋ฏผ์ด๊ฐ€ ๊ฐ€์žฅ ์ข‹์•„ํ•˜๋Š” ์ด์•ผ๊ธฐ๋ฅผ ํ•œ๋‹ค. ์ง€๋ฏผ์ด๋Š” ๊ทธ ์ด์•ผ๊ธฐ๋ฅผ ๋งํ•  ๋•Œ, ์žˆ๋Š” ๊ทธ๋Œ€๋กœ ์ง„์‹ค๋กœ ๋งํ•˜๊ฑฐ๋‚˜ ์—„์ฒญ๋‚˜๊ฒŒ ๊ณผ์žฅํ•ด์„œ ๋งํ•œ๋‹ค. ๋‹น์—ฐํžˆ ๊ณผ์žฅํ•ด์„œ ์ด์•ผ๊ธฐํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๋” ์žฌ๋ฏธ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋˜๋„๋ก์ด๋ฉด ๊ณผ์žฅํ•ด์„œ ์ด์•ผ๊ธฐํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ํ•˜์ง€๋งŒ, ์ง€๋ฏผ์ด๋Š” ๊ฑฐ์ง“๋ง์Ÿ์ด๋กœ ์•Œ๋ ค์ง€๊ธฐ๋Š” ์‹ซ์–ดํ•œ๋‹ค. ๋ฌธ์ œ๋Š” ๋ช‡๋ช‡ ์‚ฌ๋žŒ๋“ค์€ ๊ทธ ์ด์•ผ๊ธฐ์˜ ์ง„์‹ค์„ ์•ˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋Ÿฐ ์‚ฌ๋žŒ๋“ค์ด ํŒŒํ‹ฐ์— ์™”์„ ๋•Œ๋Š”, ์ง€๋ฏผ์ด๋Š” ์ง„์‹ค์„ ์ด์•ผ๊ธฐํ•  ์ˆ˜ ๋ฐ–์— ์—†๋‹ค. ๋‹น์—ฐํžˆ, ์–ด๋–ค ์‚ฌ๋žŒ์ด ์–ด๋–ค ํŒŒํ‹ฐ์—์„œ๋Š” ์ง„์‹ค์„ ๋“ฃ๊ณ , ๋˜๋‹ค๋ฅธ ํŒŒํ‹ฐ์—์„œ๋Š” ๊ณผ์žฅ๋œ ์ด์•ผ๊ธฐ๋ฅผ ๋“ค์—ˆ์„ ๋•Œ๋„ ์ง€๋ฏผ์ด๋Š” ๊ฑฐ์ง“๋ง์Ÿ์ด๋กœ ์•Œ๋ ค์ง€๊ฒŒ ๋œ๋‹ค. ์ง€๋ฏผ์ด๋Š” ์ด๋Ÿฐ ์ผ์„ ๋ชจ๋‘ ํ”ผํ•ด์•ผ ํ•œ๋‹ค.

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

 

 

 

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์‚ฌ๋žŒ์˜ ์ˆ˜ N๊ณผ ํŒŒํ‹ฐ์˜ ์ˆ˜ M์ด ์ฃผ์–ด์ง„๋‹ค.

๋‘˜์งธ ์ค„์—๋Š” ์ด์•ผ๊ธฐ์˜ ์ง„์‹ค์„ ์•„๋Š” ์‚ฌ๋žŒ์˜ ์ˆ˜์™€ ๋ฒˆํ˜ธ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ง„์‹ค์„ ์•„๋Š” ์‚ฌ๋žŒ์˜ ์ˆ˜๊ฐ€ ๋จผ์ € ์ฃผ์–ด์ง€๊ณ  ๊ทธ ๊ฐœ์ˆ˜๋งŒํผ ์‚ฌ๋žŒ๋“ค์˜ ๋ฒˆํ˜ธ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์‚ฌ๋žŒ๋“ค์˜ ๋ฒˆํ˜ธ๋Š” 1๋ถ€ํ„ฐ N๊นŒ์ง€์˜ ์ˆ˜๋กœ ์ฃผ์–ด์ง„๋‹ค.

์…‹์งธ ์ค„๋ถ€ํ„ฐ M๊ฐœ์˜ ์ค„์—๋Š” ๊ฐ ํŒŒํ‹ฐ๋งˆ๋‹ค ์˜ค๋Š” ์‚ฌ๋žŒ์˜ ์ˆ˜์™€ ๋ฒˆํ˜ธ๊ฐ€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค.

N, M์€ 50 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ด๊ณ , ์ง„์‹ค์„ ์•„๋Š” ์‚ฌ๋žŒ์˜ ์ˆ˜๋Š” 0 ์ด์ƒ 50 ์ดํ•˜์˜ ์ •์ˆ˜, ๊ฐ ํŒŒํ‹ฐ๋งˆ๋‹ค ์˜ค๋Š” ์‚ฌ๋žŒ์˜ ์ˆ˜๋Š” 1 ์ด์ƒ 50 ์ดํ•˜์˜ ์ •์ˆ˜์ด๋‹ค.

 

 

 

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ๋ฌธ์ œ์˜ ์ •๋‹ต์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

ํ’€์ด๊ณผ์ •

ํ•ด๋‹น ๋ฌธ์ œ์˜ ์กฐ๊ฑด์„ ์ •๋ฆฌํ•ด๋ณด์ž๋ฉด.

  1. ์ง„์‹ค์„ ๋“ค์€ ์‚ฌ๋žŒ๋“ค์ด ํŒŒํ‹ฐ์— ์„ž์—ฌ์žˆ๋‹ค๋ฉด ๊ทธ ํŒŒํ‹ฐ์—์„œ๋Š” ์ง„์‹ค๋งŒ์„ ์ด์•ผ๊ธฐํ•ด์•ผํ•œ๋‹ค.
  2. ์ง„์‹ค์„ ์ด์•ผ๊ธฐํ•œ ํŒŒํ‹ฐ์—์„œ๋Š” ํŒŒํ‹ฐ์— ์†ํ•ด ์žˆ๋˜ ์ฃผ๋ณ€์‚ฌ๋žŒ๋“ค๋„ ์ง„์‹ค๋งŒ์„ ๋“ค์—ˆ๊ธฐ๋•Œ๋ฌธ์— ์ง„์‹ค์„ ๋“ค์—ˆ๋˜ ์‚ฌ๋žŒ๋“ค์ด ๋‹ค๋ฅธ ํŒŒํ‹ฐ์— ์†ํ•ด์žˆ๋‹ค๋ฉด ๊ทธ ํŒŒํ‹ฐ ๋˜ํ•œ ์ง„์‹ค๋งŒ์„ ์ด์•ผ๊ธฐํ•ด์•ผํ•œ๋‹ค.

์œ„์™€ ๊ฐ™์€ ์กฐ๊ฑด์ผ๋•Œ ๊ฑฐ์ง“์„ ๋งํ•ด๋„ ๋˜๋Š” ํŒŒํ‹ฐ๋Š” ๋ช‡๊ฐœ์ธ๊ฐ€?

๋ผ๋Š” ์กฐ๊ฑด์œผ๋กœ ์œ„์— ํ•ด๋‹นํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ’€์–ด์•ผํ•œ๋‹ค.

์œ„์— ์žˆ๋Š” ์˜ˆ์ œ 4๋ฒˆ์„ ํ•ด์„ํ•ด๋ณด์ž๋ฉด

1๋ฒˆ์ธ ์‚ฌ๋žŒ์ด ์ง„์‹ค์„ ๋“ค์€ ์‚ฌ๋žŒ์ด๊ณ  4๋ฒˆ์ธ ์‚ฌ๋žŒ์ด 1๋ฒˆ๊ณผ ๊ฐ™์€ ํŒŒํ‹ฐ์—์„œ ์ด์•ผ๊ธฐ๋ฅผ ๋“ค์—ˆ์œผ๋‹ˆ 4๋ฒˆ๋„ ์ง„์‹ค์„ ๋“ค์€ ์‚ฌ๋žŒ์ด ๋œ๋‹ค.

๊ทธ๋ž˜์„œ

1 1 ์€ 1๋ฒˆ๋งŒ ์žˆ๋Š” ํŒŒํ‹ฐ์ด๊ธฐ๋•Œ๋ฌธ์— ์ง„์‹ค๋งŒ์„ ์ด์•ผ๊ธฐํ•ด์•ผํ•œ๋‹ค.

1 2 ๋Š” 2๋ฒˆ๋งŒ ์žˆ๊ธฐ๋•Œ๋ฌธ์— ๊ฑฐ์ง“์„ ์ด์•ผ๊ธฐํ•ด๋„ ๋œ๋‹ค.

1 3 ์€ 3๋ฒˆ๋งŒ ์žˆ๊ธฐ๋•Œ๋ฌธ์— ๊ฑฐ์ง“์„ ์ด์•ผ๊ธฐํ•ด๋„ ๋œ๋‹ค.

1 4 ์€ '2 4 1' ์—์„œ ์ง„์‹ค์„ ๋“ค์—ˆ๊ธฐ๋•Œ๋ฌธ์— ์ง„์‹ค์„ ์ด์•ผ๊ธฐํ•ด์•ผํ•œ๋‹ค.

2 4 1 ์€ 4๋ฒˆ๊ณผ 1๋ฒˆ์ด ๊ฐ™์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ง„์‹ค์„ ์ด์•ผ๊ธฐํ•ด์•ผํ•œ๋‹ค.

๊ทธ๋ž˜์„œ ์œ„์— ์˜ˆ์ œ ์ถœ๋ ฅ์ด ๊ฑฐ์ง“์ธ ํŒŒํ‹ฐ๊ฐ€ 2๊ฐœ์ด๊ธฐ๋•Œ๋ฌธ์— 2๊ฐ€ ๋˜๋Š” ํ˜•์‹์ด๋‹ค.

 

๋ฌธ์ œ์—์„œ๋Š” ์ž…๋ ฅ๊ฐ’๋“ค์„ ๊ทธ๋ž˜ํ”„๋กœ ๋ณด๊ณ  ๊ฐ€์žฅ ์ฒ˜์Œ์— ์ง„์‹ค์„ ๋“ค์—ˆ๋˜ ์‚ฌ๋žŒ๋“ค๊ณผ ๊ฐ™์€ ๊ฐ„์„ ์œผ๋กœ ๋ฌถ์—ฌ์žˆ๋Š” ๊ฐ’์ด ์žˆ๋‹ค๋ฉด ๊ทธ ๊ฐ’๋„ ์ง„์‹ค๋กœ ํ•˜๊ณ ,

๋ชจ๋“  ํŒŒํ‹ฐ๋ฅผ ๋Œ๋ฉฐ ๋ชจ๋‘ ๋‹ค ๊ฑฐ์ง“์„ ๋“ค์–ด์•ผํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ์žˆ์–ด์•ผ๋งŒ count๋ฅผ ์ฆ๊ฐ€ ์‹œํ‚ค๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ง„ํ–‰ํ•˜์˜€๋‹ค.

 

code

#include <iostream>
#include <queue>
#include <vector>

std::vector <int> party[51];
std::vector <int> graph[51];
int	trueParty[51];

void	bfs()
{
	int	temp, node;
	std::queue <int> q;

	// ์ง„์‹ค์Ÿ์ด๋“ค์˜ ๊ฐœ์ˆ˜
	for (int i = 0; i < party[0].size(); i++) {
		// ์ง„์‹ค์Ÿ์ด๋“ค๊ณผ ๋ฌถ์ธ ๋…ธ๋“œ๋“ค์˜ ๊ฐœ์ˆ˜
		for (int j = 0; j < graph[party[0][i]].size(); j++) {
			q.push(graph[party[0][i]][j]);
		}
	}
	while (!q.empty())
	{
		// ์ง„์‹ค์Ÿ์ด๋“ค๊ณผ ์—ฐ๊ฒฐ๋œ ์–˜๋“ค
		node = q.front();
		trueParty[node] = true;
		q.pop();
		for (int i = 0; i < graph[node].size(); i++) {
			temp = graph[node][i];
			if (!trueParty[temp]) {
				q.push(temp);
				trueParty[temp] = true;
			}
		}
	}
}

int		main(void)
{
	int n, m, t, temp, count;

	std::cin >> n >> m;
	for (int i = 0; i < m + 1; i++)
	{
		std::cin >> t;
		for (int j = 0; j < t; j++) {
			std::cin >> temp;
			party[i].push_back(temp);
		}
	}

	for (int i = 0; i < m + 1; i++) {
		for (int j = 0; j < party[i].size(); j++) {
			if (j + 1 < party[i].size()) {
				graph[party[i][j]].push_back(party[i][j + 1]);
				graph[party[i][j + 1]].push_back(party[i][j]);
			}
		}	
	}
	bfs();
	count = 0;
	for (int i = 1; i < m + 1; i++) {
		count++;
		for (int j = 0; j < party[i].size(); j++) {
			if (trueParty[party[i][j]]) {
				count--;
				break;
			}
		}
	}
	std::cout << count << "\n";

	return (0);
}

 

ํ›„๊ธฐ

๋ฟŒ๋“ฏํ•˜๋‹ค.