[자료구조] 17. 이진 트리 순회: 넓이 우선 탐색(Breadth First Search, BFS)
복습: 트리의 순회 (Traversal) 깊이 우선 순회 (Depth First Search, DFS): 트리의 루트에서 시작하여 가능한 깊이 들어가며 트리의 노드를 순회한다. 특정 노드에서 더 이상 깊이 들어갈 수 없게되면, 이전 노드로 돌아와 다음 노드를 방문하는 방식으로 순회가 진행된다. 넓이 우선 순회 (Breadth Fir...
복습: 트리의 순회 (Traversal) 깊이 우선 순회 (Depth First Search, DFS): 트리의 루트에서 시작하여 가능한 깊이 들어가며 트리의 노드를 순회한다. 특정 노드에서 더 이상 깊이 들어갈 수 없게되면, 이전 노드로 돌아와 다음 노드를 방문하는 방식으로 순회가 진행된다. 넓이 우선 순회 (Breadth Fir...
안전하게 접근하면서 간결하게…? 이전 포스팅에서 클래스 속성의 접근 방식은 직접 접근 방법보다 메서드를 이용한 간접 접근 방식이 안전하다는 것에 관한 내용을 다루었다. 그리고, 이러한 보호를 위한 메서드는 속성을 다루는 성격에 따라 다음과 같이 구분할 수 있다. getter: 클래스 객체의 값을 조회하는 성격을 ...
이진 트리의 순회 (Traversal) 이진 트리의 순회 로직은 깊이 우선 탐색과 넓이 우선 탐색로 구분된다. 깊이 우선 탐색 (Depth First Search, DFS): 트리의 루트에서 시작하여 가능한 깊이 들어가며 트리의 노드를 순회한다. 특정 노드에서 더 이상 깊이 들어갈 수 없게되면, 이전 노드로 돌아와 다음 노드를 방문하는 방식...
__dict__의 단점 앞서 이야기했듯이 기본적으로 Python의 모든 객체는 __dict__라는 딕셔너리를 가지고 있어서 객체의 속성을 저장한다. __dict__는 유연성을 제공하지만, 메모리를 상당히 많이 사용한다. 하지만, 아래와 같은 3차원 좌표 객체를 이용해 특정 물체를 상세히 모델링한다고 가정했을 때, 수백 개...
이진 트리의 추상적 자료구조: 트리 & 노드 (1) 이진 트리: 노드(Node) 구현 이진 트리의 노드에는 데이터 원소만이 포함되어 있을 뿐만 아니라, 좌측 자식 노드와 우측 좌식 노드를 이어주는 링크(즉, 포인터)가 존재한다. 따라서, 이진 트리의 노드를 객체로 구현할 때 다음의 요소들을 고려해야한다. 노드의 데이...
속성 감춤의 필요성 프로그래머의 실수로 인한 오류는 종종 실행 시점에서는 잘 동작하는 것처럼 보이지만, 실제로는 예상치 못한 결과를 초래할 수 있다. 이러한 문제는 실제 서비스에서 발생할 경우 큰 피해를 줄 수 있다. 예를 들어, 다음과 같이 주민등록상의 만 나이를 직접 조정하는 경우가 문제가 될 수 있다. ...