CS/자료구조와 알고리즘 4

트리 순회

➡️ 트리 순회 순회: 자료 구조에 저장된 모든 데이터를 도는 것 트리 순회에는 주로 재귀 함수를 사용함 순회 기본 동작 3가지 재귀적으로 왼쪽 부분 트리 순회 재귀적으로 오른쪽 부분 트리 순회 현재 노드 데이터를 출력 ☁ Preorder 순회 (전위 순회) pre: ~ 전에 => 부분 트리 순회 "전"에 현재 노드 출력 현재 노드 데이터 출력 -> 재귀적으로 왼쪽 부분 트리 순회 -> 재귀적으로 오른쪽 부분 트리 순회 출력: F, B, A, D, C, E, G, I, H ☁ Postorder 순회 (후위 순회) post: ~ 후에 => 부분 트리 순회 "후"에 현재 노드 출력 재귀적으로 왼쪽 부분 트리 순회 -> 재귀적으로 오른쪽 부분 트리 순회 -> 현재 노드 데이터 출력 출력: A, C, E, D,..

트리

🌲 트리 데이터의 상-하 관계를 저장하는 자료 구조 => 계층적 관계 root 노드(뿌리 노드): 트리의 시작 노드 부모 노드: 특정 노드의 직속 상위 노드 자식 노드: 특정 노드의 직속 하위 노드, 부모 노드와 반대 개념 형제 노드: 같은 부모를 같는 노드 leaf 노드(잎/말단 노드): 자식 노드를 갖고 있지 않은, 가장 말단에 있는 노드 깊이: 특정 노드가 root 노드에서 떨어져 있는 거리 레벨: 깊이 + 1 높이: 트리에서 가장 깊이 있는 노드의 깊이 부분트리(sub-tree): 현 트리의 일부분을 이루고 있는 더 작은 트리 ✌ 이진 트리 각 노드가 최대 2개의 자식 노드를 갖을 수 있는 트리 💻 이진 트리 구현 class Node: """이진 트리 노드 클래스""" def __init__(se..

그리디

🔎 그리디 탐욕법, 욕심쟁이 알고리즘 => 단순 무식하게, 탐욕적으로 문제를 푸는 알고리즘 탐욕적: '현재 상황에서 지금 당장 좋은 것만 고르는 방법' 매 순간 가장 좋아 보이는 것을 선택하며, 현재의 선택이 나중에 미칠 영향에 대해서는 고려 X ✅ 그리디 알고리즘의 정당성 대부분의 문제는 그리디 알고리즘을 이용했을 때 '최적의 해' 찾을 수 없을 가능성 높음 But, 탐욕적으로 문제에 접근했을 때 정확한 답을 찾을 수 있다는 보장 있다면 매우 효과적이고 직관적! 그리디 알고리즘으로 문제의 해법을 찾았을 때는 그 해법이 정당한지 검토해야 함 그리디 알고리즘 문제에서는 이처럼 문제 풀이를 위한 최소한의 아이디어를 떠올리고 이것이 정당한지 검토할 수 있어야 답을 도출할 수 있음 ..

DFS, BFS

🔖 자료구조 기초 탐색이란 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정 자료구조란 '데이터를 표현하고 관리하고 처리하기 위한 구조' 특히 스택과 큐는 자료구조의 기초 개념이며 다음의 두 핵심적인 함수로 구성됨 - 삽입(Push): 데이터를 삽입함 - 삭제(Pop): 데이터를 삭제함 이 외에 오버플로와 언더플로도 고민해야 함 ☁ 스택 스택은 박스 쌓기에 비유할 수 있음 아래에서부터 위로 차곡차곡 쌓고, 아래의 박스를 치우기 위해선 위의 박스를 먼저 내려야 함 선입후출 구조, 후입선출 구조라고 함 파이썬에서 스택을 이용할 때에는 별도의 라이브러리를 사용할 필요 없음 기본 리스트에서 append()와 pop() 메서드를 이용하면 됨 append() 메서드는 리스트의 가장 뒤쪽에 데이터 삽..