๐Ÿ™„1068๋ฒˆ. ํŠธ๋ฆฌ _๋ฒกํ„ฐ erase, find ๋…ธ๋“œ ์ •๋ฆฌ

phoenixKimยท2022๋…„ 9์›” 9์ผ
0

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

๋ชฉ๋ก ๋ณด๊ธฐ
113/174
  • ๊ด€๋ จ ๋ฌธ์ œ
    : 1325๋ฒˆ. ํšจ์œจ์ ์ธ ํ•ดํ‚น.

241118 ๋ถ€์กฑํ•œ ๋ถ€๋ถ„

  • ๋ฐ˜ํ™˜๊ฐ’์ด ์žˆ๋Š” ์žฌ๊ท€์˜ ๊ฒฝ์šฐ, ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ด ์žˆ๋‹ค.

  • ์•„๋ž˜์˜ ์ž…๋ ฅ์„ ๋„ฃ์œผ๋ฉด 2๊ฐ€ ๋‚˜์™€์•ผ ํ•˜๋Š”๋ฐ, 1์ด ์ถœ๋ ฅ๋œ๋‹ค.

  • ๋ฐ˜ํ™˜๊ฐ’์ด ์ ์šฉ๋˜๋Š” ์žฌ๊ท€๋ฅผ ๋งŒ๋“ค๊ฒฝ์šฐ, ์ด๋Ÿฐ์‹์œผ๋กœ ํ•˜๊ฒŒ๋˜๋ฉด, ์›์น˜ ์•Š๋Š” ๋ฐ˜ํ™˜๊ฐ’์ด ์ด์ „์— ํ˜ธ์ถœํ•œ ์žฌ๊ท€์— ์ ์šฉ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

๊ฒฐ๋ก 

: ๋ฐ˜ํ™˜๊ฐ’์ด ์žˆ๊ณ , ๋ˆ„์ ๋˜๋Š” ์žฌ๊ท€์˜ ๊ฒฝ์šฐ, ์ง€๊ธˆ ๋ฐ˜ํ™˜๋˜๋Š” ์žฌ๊ท€๊ฐ€ ์ด์ „ ์žฌ๊ท€์— ์˜ํ–ฅ์„ ์ค„์ˆ˜ ์žˆ๋”ฐ๋Š” ์ƒ๊ฐ์„ ํ•ด์•ผ ํ•œ๋‹ค.

์ง€๊ธˆ์˜ ๊ฒฝ์šฐ, 38~39๋ฒˆ ์ค„ ์ฒ˜๋Ÿผ ์ฒ˜๋ฆฌํ•˜๋ฉด ์•ˆ๋œ๋‹ค. -1์„ ๋ถ€๋ชจ๋กœ ํ•˜๋Š” 3๋ฒˆ ๋…ธ๋“œ์˜ ๊ฒฝ์šฐ, 1์ด ๋ฐ˜ํ™˜๋˜์–ด์•ผ ํ•˜๋Š”๋ฐ, 0์œผ๋กœ ๋ฐ˜ํ™˜๋˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•œ๋‹ค. ...

  • ์žฌ๊ท€์žฌ๊ท€ ๋ˆ„์ ๋˜๋Š” ๊ฒฝ์šฐ์— ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ๋ฎ์–ด์จ์ง€์ง€ ์•Š๊ณ  ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ• ๊นŒ?? ๋ฅผ ์ƒ๊ฐํ•ด์•ผ ํ•œ๋‹ค.

์ตœ๊ทผ ํ’€์ด 241031

  • ์ด๊ฑฐ๋Š” ๋…ธ๋“œ๋กœ๋Š” ์ „ํ˜€ ํ’€์ˆ˜๊ฐ€ ์—†๋‹ค.
    1) ๋ฃจํŠธ๋…ธ๋“œ๊ฐ€ ๋ฐ˜๋“œ์‹œ 0๋ฒˆ ์ •์ ์ด๋ผ๋Š” ๊ฒƒ์„ ํ™•์ •ํ•  ์ˆ˜ ์—†๋‹ค.
    2) ์•ž์„  ์ •์ ์ด ๋’ท๋ฒˆํ˜ธ ์ •์ ์„ ๋ถ€๋ชจ๋กœ ์‚ผ์„ ์ˆ˜ ์žˆ๋”ฐ.

-> ์ง€๊ธˆ๊นŒ์ง€ ์ง„ํ–‰ํ•œ ์ƒ๊ฐ์„ ๋ฒ„๋ฆฌ๊ณ , ๋น ๋ฅด๊ฒŒ
๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ•ด๋‚ด์•ผ ํ•œ๋‹ค.

// ์ž์‹๋…ธ๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•ด์„œ parent ๋ฅผ ์ €์žฅํ–ˆ๋‹ค.
v[๊ฐ ์ •์  ๋ฒˆํ˜ธ] = parent ๊ทธ๋Ÿฐ๋ฐ ์ง€๊ธˆ์˜ ๊ฒฝ์šฐ, ๋…ธ๋“œ๋ฐฉ์‹์œผ๋กœ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์—
// ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ•˜์ž.

  • ๋ฌธ์ œ์—์„œ ๋งํ•˜๋Š”๊ฒŒ ๋ฆฌํ”„๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜์ด๋‹ค.
    ๊ทธ๋Ÿฌ๋ฉด v[๋ถ€๋ชจ์˜ ์ •์ ] ์—๋‹ค๊ฐ€ ์ž์‹๋…ธ๋“œ์˜ ์ •์ ์„ pushํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰ํ•˜๋ฉด ๋˜์ง€ ์•Š์„๊นŒ???? ๋ฅผ ์ƒ๊ฐํ•ด์•ผ ํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ 

  • ๋Š์–ด์ง€๋Š” ๋ถ€๋ถ„์€ erase ํ•˜์ง€ ๋ง๊ณ , ์Šคํ‚ตํ•˜๋ฉด์„œ ์ง„ํ–‰ํ•˜๋ฉด ๋ ๋“ฏ ํ•˜๋‹ค.

1๋ฒˆ์งธ ํ’€์ด

  • ๋ฆฌํ”„๋…ธ๋“œ๋Š” ๋Œ€์ƒ์œผ๋กœ ํ•œ ์ •์ ์˜ ๋ฒกํ„ฐ ์‚ฌ์ด์ฆˆ๊ฐ€ 0์ธ๊ฒฝ์šฐ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
    ๊ทธ๋ž˜์„œ ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ–ˆ๋‹ค.
    -> 70ํผ์„ผํŠธ ์˜ฌ๋ผ๊ฐ€๋‹ค๊ฐ€ ํ‹€๋ฆผ.

2๋ฒˆ์งธ ํ’€์ด

: ๋ญ๊ฐ€ ์ž˜๋ชป๋˜์—ˆ์„๊นŒ? ์ƒ๊ฐํ•ด๋ณด์ž.

  • for๋ฌธ์„ ๋ณด๋ฉด, deleteNum ํ•œ ๊ฐ’์€ continue๋ฅผ ํ•˜๊ฒŒ ๋œ๋‹ค.
    ๋งŒ์•ฝ์— deleteNum์— 1๊ฐœ์˜ ์ •์ ์ด ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค๋ฉด, ์ด ์นœ๊ตฌ์˜ ๊ฒฝ์šฐ๋„ return 1 ์ฒ˜๋ฆฌ๋ฅผ ๋ฐ”๋กœ ํ•ด์•ผ ํ•œ๋‹ค. 53๋ฒˆ์ค„๊นŒ์ง€ ๋‚ด๋ ค๊ฐ€๋ฉด ๋ˆ„์ ๋œ๋‹ค.
    ๊ทธ๋ƒฅ ๋ฐ”๋กœ 1 ๋ฐ˜ํ™˜์„ ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋กœ์ง์„ ์ด๋ ‡๊ฒŒ ๋ณ€๊ฒฝํ•˜๋‹ˆ๊นŒ 100์  ๋งž์•˜๋‹ค.

-> ์•„ ๊นŒ๋‹ค๋กญ๋‹ค...


์•Œ์•„๋‘์—ˆ์œผ๋ฉด ์ข‹์•˜์„ stl ์•Œ๊ณ ๋ฆฌ์ฆ˜

  1. find
    : find๋ฅผ ์ž˜ ์‚ฌ์šฉํ–ˆ๋”๋ผ๋ฉด ์ฝ”๋“œ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์—ˆ์Œ.
  1. erase
    : erase ๋Š” ๋ฐ˜๋“œ์‹œ ์ดํ„ฐ๋ ˆ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐ€์•ผ ํ•จ.

์˜ฌ๋ฐ”๋ฅธ ์ „๋žต

: ๊ทธ๋ƒฅ ๋ฌธ์ œ ๊ทธ๋Œ€๋กœ erase ํ•˜๋Š” ๊ฒƒ์ด ๋งž์Œ.

๋ถ€์กฑํ•œ ์ .

    1. erase
    1. ๋ฐ˜๋“œ์‹œ 0๋ฒˆ ๋…ธ๋“œ๊ฐ€ ๋ฃจํŠธ๋…ธ๋“œ์ธ ๊ฒƒ์€ ์•„๋‹˜.

๋งž์™œํ‹€?

  • ๋ฐฑํŠธ๋ž˜ํ‚น์œผ๋กœ ์ž์‹๋…ธ๋“œ๊ฐ€ ์—†์„ ๊ฒฝ์šฐ์— ์นด์šดํŒ…์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์ ‘๊ทผํ•ด์•ผ ํ•จ.
  • ํ•˜์ง€๋งŒ, ๋‚˜๋Š” void์ด๊ณ , ์ „์—ญ์„ ๋ˆ„์ ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ–ˆ์Œ.
    -> ์ด๋Ÿด ๊ฒฝ์šฐ์— ํ•œ์ค„๋กœ๋งŒ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ์ƒํƒœ์—์„œ ์ค‘๊ฐ„์„ ์ œ๊ฑฐํ•ด๋ฒ„๋ฆฌ๋ฉด
    0์ด ๋‚˜์˜ด.

์ฒซ๋ฒˆ์งธ ํ’€์ด

: ์ž…๋ ฅ์˜ˆ์ œ๋Š” ๋ชจ๋‘ ๋งž์•˜๋Š”๋ฐ, ํ‹€๋ฆผ...

#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
#include <map>
#include <cstring>
#include <queue>


// 1068 ํŠธ๋ฆฌ
// 13:41 ~ 14:04 ๋ฐฅ ๋จน์ž.

// 14:26 ~ 

struct tree
{
	int parent;
	vector<int>child;
};

int res = 0;
int n;
int m;

void dfs(vector<tree>&v , int startNode)
{
	if (startNode == m)
		return;

	if (v[startNode].child.empty())
	{
		//cout << "ํ•ด๋‹น ๋…ธ๋“œ์˜ ๋ฒˆํ˜ธ๋Š” " << startNode << endl;
		++res; 
		return;
	}

	int childSize = v[startNode].child.size();
	
	for (int i = 0; i < childSize; ++i)
	{
		// m์ธ ๊ณณ์€ ํƒ์ƒ‰ ๋ชปํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฉ ๋‚˜์„ ๋“ฏํ•จ?
		//if (v[startNode].child[i] == m)
			//continue;
		dfs(v, v[startNode].child[i]);

	}


}

void Erase(int index, vector<tree>&v)
{
	// ๋ฃจํŠธ๋…ธ๋“œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ 
	// ๋…ธ๋“œ ์ฐพ์•„์„œ ๋ฐ‘์— ์žˆ๋Š” ๊ฒƒ๋ถ€ํ„ฐ ์ œ๊ฑฐ ํ•ด๋‚˜๊ฐ€๋Š” ๋ฐฉ์‹์œผ๋กœ ? 

	int ssize = v[index].child.size();

	for (int i = 0; i < ssize; ++i)
	{
		if (v[index].child[i] == m - 1)
		{

			//v[index].child.pop_back();
		}

	}


}


int main()
{
	// 0 ๋ฒˆ ๋…ธ๋“œ์—์„œ๋ถ€ํ„ฐ n - 1๋ฒˆ ๋…ธ๋“œ๊นŒ์ง€ 
	
	cin >> n;

	vector<tree>v(n);

	for (int i = 0; i < n; ++i)
	{
		int n;
		cin >> n;
		v[i].parent = n;

		if (n < 0)
			continue;
		v[n].child.push_back(i);
	
	}

	//int realNodeCnt = 0;
	//for (int i = 0; i < v.size(); ++i)
	//{
	//	int ssize = v[i].child.size();
	//
	//	cout << i << "๋ฒˆ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ๋Š” " << v[i].parent << endl;
	//	cout << i << "๋ฒˆ ๋…ธ๋“œ์˜ ์ž์‹๋“ค์€ " << endl;
	//	
	//	for (int j = 0; j < ssize; ++j)
	//	{
	//		cout << v[i].child[j] << " ";
	//	}
	//	cout << endl;
	//
	//}

	
	cin >> m;
	dfs(v, 0);
	cout << res;
	


}
profile
๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ

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

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด