구간 트리(겹침 질의) 계산기
구간(시작,끝) 여러 개를 넣어 두고, 주어진 구간과 겹치는 것들을 O(log n + k)에 찾습니다. 노드마다 서브트리 최대 끝점(max)을 저장해 어느 가지를 건너뛸 수 있는지 보여주고, 전수 탐색과 결과를 대조합니다.
한 줄에 "시작,끝,이름"(이름은 생략 가능)
[4, 7]와 겹치는 구간
3개
회의B, 회의A, 회의D
탐색 과정 (방문한 노드만)
| 노드 | 구간 | 겹침 | 들어간 가지 |
|---|---|---|---|
| 회의B | [3, 8] | 겹침 | 왼쪽, 오른쪽 |
| 회의A | [1, 5] | 겹침 | 없음 |
| 회의C | [10, 14] | 아님 | 왼쪽 |
| 회의D | [6, 9] | 겹침 | 없음 |
전체 5개 구간 중 4개 노드만 방문했습니다. 나머지는 max 값과 시작점 비교만으로 겹칠 수 없다고 판단해 건너뛴 것입니다.
사용 방법
- 1구간(시작,끝,이름)을 여러 개 입력합니다.
- 2겹침을 찾을 질의 구간을 입력합니다.
- 3어느 가지를 건너뛰고 어느 가지를 들여다봤는지 탐색 과정을 봅니다.
- 4결과가 전수 탐색과 같은지 확인합니다.
자주 묻는 질문
구간(시작,끝) 여러 개가 있을 때, 주어진 질의 구간과 겹치는 것들을 빠르게 찾기 위한 것입니다. 이진탐색트리에 구간을 시작점 기준으로 넣되, 노드마다 「자기 서브트리 안 모든 구간의 끝점 중 최댓값(max)」을 함께 저장해 둡니다.
탐색 도중 어떤 서브트리를 아예 안 들여다봐도 되는지 판단하는 근거이기 때문입니다. 왼쪽 서브트리의 max가 질의의 시작점보다 작으면, 그 안의 모든 구간이 질의보다 먼저 끝나 겹칠 수 없다는 뜻이라 통째로 건너뜁니다.
트리가 시작점 순으로 정렬되어 있으므로, 지금 노드의 시작점이 이미 질의의 끝점보다 늦으면 오른쪽에 있는(시작점이 더 큰) 구간들은 더더욱 늦게 시작해 겹칠 수 없습니다. 그래서 지금 노드의 시작점 ≤ 질의의 끝점일 때만 오른쪽으로 들어갑니다.
세그먼트 트리는 고정된 배열 위에서 구간 [i,j]의 합·최솟값 같은 것을 답하는, 축이 「배열의 위치」인 자료구조입니다. 구간 트리는 반대로 구간 「집합」 자체가 데이터이고 「이 구간과 겹치는 것이 있는가」를 답합니다 — 캘린더 일정 겹침, 스케줄링 충돌 검사, 지놈 구간 겹침 같은 곳에 씁니다.
전송되지 않습니다. 계산은 모두 브라우저 안에서 이뤄지고 입력값은 이 기기에만 남습니다.
알아두면 좋은 점
- 무작위 구간 집합(1~20개)과 다양한 질의 구간에서 구간 트리의 결과가 O(n) 전수 탐색과 정확히 같은지 15세트 × 질의 10개씩 확인했습니다.
- 경계에 닿기만 해도 겹침으로 판정하는지(폐구간), 완전히 포함되는 관계도 겹침으로 잡는지, 겹치는 것이 하나도 없으면 빈 결과인지 확인했습니다.
- 빈 구간 집합에서도 오류 없이 빈 결과를 내는지 확인했습니다.
함께 보면 좋은 도구
마지막 검증: 2026년 9월 2일 · 결과는 참고용 추정치입니다.