작성
·
347
0
http://boj.kr/55862649400e4247b3f86bb00a826ac1
해당 문제에서 위의 링크와 같이 코딩을 하는경우, child node가 원래 존재했지만 삭제되어 parent node가 leaf노드가 된 경우를 잡아내지 못하게 됩니다.
코딩을 하다 보니 위와 같은 경우를 떠올리지 못하여 child가 원래 없는 것만 체크하게 되었습니다.
이런 실수를 줄일수 있는 방법은 없을까요??
그냥 트리관련된 문제는 이런 경우도 있을수 있다! 하고 넘어가야하는 걸까요??
답변 2
0
0
안녕하세요 태민님 ㅎㅎ
int dfs(int here){
int ret = 0;
int child = 0;
if(child == 0) return 1; // 질문지점입니다!!!!
이부분이죠?
사실 이러한 반례를 생각하는게 어렵습니다.
그래서 처음에 코딩을 하기전에 손코딩을 하면서 이렇게 되면 어떻게 될까? 저렇게 하면 저렇게 될까? 하면서 생각을 어느정도 하고 들어가는게 좋습니다.
반례팁을 드리자면요.
반례를 찾을 때 특이한 지점을 중점으로 생각해보시는게 좋습니다.
지우는 정점이 루트노드라면?
루트노드 밑에 있는 정점이라면?
어떻게 될까.. 하고 말이죠.
이 문제는 트리라는 자료구조가 주어집니다.
트리에서 특이한 지점은 2가지입니다. 리프, 그리고 루트노드입니다.
이러한 지점을 중점으로 생각해보면 어느정도 반례찾는데 도움이 되실겁니다.
제 강의에 보면 반례팁이라고 되어있는 강의가 있는데 해당 강의도 참고 부탁드립니다.
두개의 강의가 있습니다.
3-D와 반례
맞왜틀팁 : 반례를 생각하는 방법 | 2 - C 보완설명
또 질문 있으시면 언제든지 질문 부탁드립니다.
좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)
감사합니다.
강사 큰돌 올림.