인프런 커뮤니티 질문&답변

정한수님의 프로필 이미지
정한수

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

2-R

2-R 1068 질문 드립니다.(링크 수정하여 다시 올립니다)

작성

·

247

1

선생님 죄송합니다. 링크 수정하여 다시 질문 드립니다.

저는 Input 값을 받을 때, 부모 자식에 대한 꼬리표를 같이 매겨서 부모 = 1 / 자식 = 2 / 루트 = -1 이런 식으로 풀었는데요. 75 % 쯤에서 Fail이 뜨네요 ㅠㅠ

어떤 문제가 있는 걸까요? 코드는 아래 링크에 있습니다

http://boj.kr/457d11f9ac914b61b98f62c5f2a89554

감사합니다

답변 1

0

큰돌님의 프로필 이미지
큰돌
지식공유자

안녕하세요 한수님 ㅎㅎ

이 문제는 노드를 지우고 >> 리프노드를 세는 건데요.

일단은 이부분.

	for (int i = 0; i < n; i++) {
		//-1이 아니라. 1인. 주어지는 간선을 기반으로 리프노드 카운팅하는게
		// 더 나아보임. 2는 새로이 만든거니까 헷갈려요. 
		if ((arr[i].size() == 1) && (arr[i][0].first == 1)) cnt2++;
	}

-1이 아니라 1로 하는게 맞죠. 왜냐면 2가 포함되면. 2는 한수님이 로직을 위해 만든 역방향 간선이기 때문에 해당 부분은 포함되면 안되는 것 같습니다.

 

저는 근데 이 로직이 이해가 안가는데요.

이로직은 지워지는 정점으로 이어지는 정점의 사이즈가 1, 그리고 루트노드가 아니라면 cnt++을 합니다.

	//만약 지워지는 간선이 리프노드라면?? cnt++???  
	if (arr[del].size() == 1 && arr[del][0].first != -1) {
		cnt++;
		return;
	}

image저의 화가같은.. 그림입니다.하하.

그니까 한수님은 이런 로직이죠. del 타고타고 가서 저 초록색일 때 cnt++하는 거잖아요.


저걸 카운팅하고 >> 추후에 리프노드수를 세고 >> 그 수를 빼는게

어떻게 이게 지워진 정점의 리프노드의 수가 되는지 의아해서요.

	cout << cnt2 - cnt;

그니까 이경우.

이경우는 리프노드라. adj[del].size == 1에 안걸릴 거같아서요.

혹시 증명 가능한가요?

image

또 질문 있으시면 언제든지 질문 부탁드립니다.

좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 올림.

정한수님의 프로필 이미지
정한수
질문자

선생님 안녕하세요.

pair <int,int> 를 사용하여 (카테고리, 노드번호) 를 아래와 같이 구현했습니다.

루트 : -1 / 부모 : 1 / 자식 : 2

(루트 / 부모 / 자식 , 노드번호)

Ex) 아래 그림에서 No. 0은 루트 노드이면서 (2,1),(2,2) 자식노드인 1 , 2 를 가지고 있다는 식으로 구현을 했는데요.

cnt2를 카운팅할 때, 리프 노드는 자식이 없고 부모 하나밖에 없다는 생각에 착안하여

size가 1인 녀석들이 리프노드라고 생각했습니다. cnt2 = 리프 노드의 총 갯수

image

del이 1이라고 가정을 한다면

1이 가지고 있는 (arr[del][i].first == 2) --> 자식 노드들의 값 3 / 4 를 인자값으로 넘겨주게 되면 해당 3 / 4 인 녀석들은 size가 1(리프노드) 이기 때문에 cnt++ 를 하고 리턴을 하게 됩니다. 결론 적으로 재귀함수를 다 돌게 되면 del = 1 과 연계 되는 모든 리프노드들이 계산이 되게 된다고 생각했습니다.

image

image

따라서, cnt2(리프노드 총 갯수) - cnt(del과 연계된 모든 리프노드) = 남은 리프노드

라고 생각하여 구현했는데 예외가 어떤게 있는지 잘 모르겠네요 ㅠㅠ

 

큰돌님의 프로필 이미지
큰돌
지식공유자

아 이해했습니다.

다음과 같은 반례가 있습니다.

2

-1 0

정답 : 1

코드 : 아무것도 출력이 안됨.

9

-1 0 0 5 2 4 4 6 6

정답 : 2

코드 : 아무것도 출력이 안됨.

확인 부탁드려요.

또 질문 있으시면 언제든지 질문 부탁드립니다.

좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 올림.

정한수님의 프로필 이미지
정한수
질문자

아! 이해 했습니다. 감사합니다~!

정한수님의 프로필 이미지
정한수

작성한 질문수

질문하기