CS 기초 · 심화
세그먼트 트리(Segment Tree)의 특징과 사용 사례에 대해 설명해주세요.
힌트 · 구간 합, 구간 최솟값 쿼리를 생각해보세요.
구간 합최솟값/최댓값이진 트리logarithmic complexitylazy propagation
모범답안
세그먼트 트리는 배열의 특정 구간에 대한 질의를 효율적으로 처리하기 위한 자료구조입니다. 기본적으로 이진 트리 형태를 가지며, 각 노드는 배열의 특정 구간에 대한 정보를 저장합니다. 예를 들어, 구간 합이나 구간 최솟값 등을 저장할 수 있습니다.
세그먼트 트리의 가장 큰 장점은 쿼리 연산의 시간 복잡도가 O(log N)으로 매우 빠르다는 점입니다. 배열의 크기가 N일 때, 트리의 높이가 log N에 비례하기 때문입니다. 또한, 특정 구간의 값을 업데이트하는 연산도 O(log N)에 수행할 수 있습니다.
주요 사용 사례로는 다음과 같은 것들이 있습니다.
- 구간 합 구하기: 배열의 특정 구간의 합을 빠르게 계산해야 할 때 유용합니다.
- 구간 최솟값/최댓값 구하기: 배열의 특정 구간에서 최솟값 또는 최댓값을 빠르게 찾아야 할 때 사용됩니다.
- Lazy Propagation: 구간 업데이트가 빈번하게 발생하는 경우, 업데이트 연산을 효율적으로 처리하기 위해 Lazy Propagation 기법을 함께 사용하기도 합니다. 이는 업데이트 정보를 노드에 저장해두었다가 필요할 때 자식 노드로 전파하는 방식입니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 자료구조 면접 질문
- 트라이(Trie) 자료구조의 특징과 사용 사례에 대해 설명해주세요.
- 레드-블랙 트리(Red-Black Tree)의 특징과 균형을 유지하는 방법에 대해 설명해주세요.
- 최소 스패닝 트리(MST)를 구하는 알고리즘(Kruskal, Prim)에 대해 설명해주세요.
- AVL 트리의 특징과 레드-블랙 트리와의 차이점에 대해 설명해주세요.
- 블룸 필터(Bloom Filter)의 동작 원리와 사용 사례를 설명해주세요.
- 동적 배열(dynamic array)의 capacity 확장 전략에서, 일반적으로 1.5배 또는 2배로 증가시킵니다. 1.5배와 2배 성장 전략의 메모리 재사용 측면 트레이드오프를 설명하고, amortized O(1) append가 성립하는 이유를 분할 상환 분석 관점에서 설명해주세요.