You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
grandchild는 b가 a의 손자인지 판별해주는 함수입니다. 손자인지 확인해보려면 b가 a의 자식에게도 enclose 되는지 체크해봐야 합니다. 따라서 a의 children 리스트를 쭉 돌면서 b가 enclose 되는지 계산해봅니다. 저는 enclose를 inner로 네이밍했습니다.
만약 enclose 걸리는게 있으면 일단 이 b는 a의 손자인 것이 맞고요, 하나도 걸리지 않으면 a의 자식인 것입니다. (return 문으로 표현되어 있습니다.)
그리고 만약 b가 a의 children 중에 한 정점(ch)과 enclose가 되면, 또다시 그 ch의 손자는 아닌지 재귀적으로 확인해보아야 합니다. 그래서 재귀함수가 쓰인 것이고.. 만약 여기서 재귀 호출된 grandchild가 False를 반환하면 이 b는 ch의 손자가 아니라 자식인거겠죠, 그럼 이 ch의 children 리스트에 b를 추가하고, visited 표시를 해줍니다.
P.S. 만약 재귀가 어렵다면 오름차순으로 정렬해서 거꾸로 정점 i 마다 부모를 찾고 바로 continue해서 다음 정점으로 넘어가는 방식으로도 구현해볼 수 있습니다. 물론 결국 트리의 지름을 구하는 과정에서 재귀를 사용해야 하기 때문에 가급적 하향식 풀이를 연습해보시는게 좋긴 하지만요.
FORTRESS self review
1. 해결 시도 과정
우선 성벽의 포함관계를 파악하기 위한 enclose 함수를 생성하였고,
이를 활용해 트리가 서로 연결되었는지 파악하는 함수까지는 구현이 가능하나
트리의 부모자식 관계 부분을 어떻게 해결해야 하는지 모르겠습니다.
2. 작성한 코드와 설명
하단의 함수는 성벽의 포함관계를 파악하는 함수이고
하단의 함수는 상단의 함수를 활용해 두 성벽이 연결되었는지 확인하는 함수 입니다.
3. 막힌 점 및 개선 사항
트리의 부모자식 관계를 해결해야할 것 같습니다.
The text was updated successfully, but these errors were encountered: