본문 바로가기

CS/Algorithm

패스트캠퍼스 챌린지 12일차

[강의] 다음은 패스트 캠퍼스 알고리즘 / 기술면접 완전 정복 올인원 패키지를 통해 학습 및 정리한 내용입니다.

 

2월 4일 오늘의 강의

 

이진탐색 자료구조 케이스

삭제할 노드, 교체할 노드의 자식 유무

 

어제 이진 탐색을 코드로 구현했을 때에는 문제가 없었지만 위와 같은 케이스에서는 문제가 발생했었다. 바로 삭제할 Node의 Child Node가 2개인 경우에서 삭제할 Node의, 바꿀 Node Child Node가 있을 경우였는데, 경우의 수를 잘 살펴보지 못하고 코드를 구현한 것이 문제였다. 당시에는 맞던 케이스라도 놓쳤던 부분이 있으면 오류가 발생할 수 있기 때문에 초기에 구조를 잘 설계하는 것도 중요하지만 만에 하나라는 심정으로 놓쳤던 부분은 없는지 복기하는 것도 중요하다.

 

코드를 구현하면서 아쉬웠던 것은 파이썬 언어에 대한 이해가 아직 부족하다는 것을 느꼈다. 코드를 보완하는 과정에서도 코드가 길어 가독성이 좋지않았는데, 클래스의 개념이 이해가 잘 안되었었는지 구현하면서도 이게 맞나 싶었다. 계속해서 보완을 해나가야겠다.

 

 

경우의 수에 따른 구현의 필요성

 

어제 구현한 자료구조 코드

 

어제 구현했었던 자료 구조의 코드이다. 문제가 되었던 것은 노드 삭제 부분에서 'child node 2개인 node 삭제' 부분이었고 경우의 수에 따라 코드를 분기해주었다.

 

구현된 코드를 바탕으로 데이터 입력 및 삭제 결과

 

잘못된 코드의 결과 값이다. 값(15)을 삭제해도 Node(17)는 연결되어 있어야하는데 False가 나왔다. 코드를 살펴보니 삭제 후 Node 간 재연결이 되지 않은 것이 문제였다. 위에서 나온 경우의 수를 포함하여 보완하여 다음과 같이 작성했다.

 

코드 보완
코드 실행 결과

 

코드를 보완한 결과이다. 중간에 Change Node Parent는 교체할 Node의 Child Node를 연결해주기 위해 생성했고, Delete Node는 Node를 삭제하기 전 생성해서 교체된 Child Node에게 삭제 전 기존 Node와 연결되었던 Child Node들과 연결시켜주기 위해 생성하였다.

 

설명도, 코드도 꽤 복잡하다. 계속 보완해나가자!

 

https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

fastcampus.co.kr

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.