도구스개발

구간 트리(겹침 질의) 계산기

구간(시작,끝) 여러 개를 넣어 두고, 주어진 구간과 겹치는 것들을 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 값과 시작점 비교만으로 겹칠 수 없다고 판단해 건너뛴 것입니다.

왼쪽 서브트리의 max가 질의 시작점보다 작으면 통째로 건너뜁니다. 그 안의 모든 구간이 질의보다 먼저 끝나 겹칠 수 없다는 뜻이기 때문입니다. 오른쪽은 지금 노드의 시작점이 질의의 끝점보다 늦으면 건너뜁니다 — 트리가 시작점 순으로 정렬돼 있어 더 늦게 시작하는 구간들만 남기 때문입니다.

사용 방법

  1. 1구간(시작,끝,이름)을 여러 개 입력합니다.
  2. 2겹침을 찾을 질의 구간을 입력합니다.
  3. 3어느 가지를 건너뛰고 어느 가지를 들여다봤는지 탐색 과정을 봅니다.
  4. 4결과가 전수 탐색과 같은지 확인합니다.

자주 묻는 질문

구간(시작,끝) 여러 개가 있을 때, 주어진 질의 구간과 겹치는 것들을 빠르게 찾기 위한 것입니다. 이진탐색트리에 구간을 시작점 기준으로 넣되, 노드마다 「자기 서브트리 안 모든 구간의 끝점 중 최댓값(max)」을 함께 저장해 둡니다.

탐색 도중 어떤 서브트리를 아예 안 들여다봐도 되는지 판단하는 근거이기 때문입니다. 왼쪽 서브트리의 max가 질의의 시작점보다 작으면, 그 안의 모든 구간이 질의보다 먼저 끝나 겹칠 수 없다는 뜻이라 통째로 건너뜁니다.

트리가 시작점 순으로 정렬되어 있으므로, 지금 노드의 시작점이 이미 질의의 끝점보다 늦으면 오른쪽에 있는(시작점이 더 큰) 구간들은 더더욱 늦게 시작해 겹칠 수 없습니다. 그래서 지금 노드의 시작점 ≤ 질의의 끝점일 때만 오른쪽으로 들어갑니다.

세그먼트 트리는 고정된 배열 위에서 구간 [i,j]의 합·최솟값 같은 것을 답하는, 축이 「배열의 위치」인 자료구조입니다. 구간 트리는 반대로 구간 「집합」 자체가 데이터이고 「이 구간과 겹치는 것이 있는가」를 답합니다 — 캘린더 일정 겹침, 스케줄링 충돌 검사, 지놈 구간 겹침 같은 곳에 씁니다.

전송되지 않습니다. 계산은 모두 브라우저 안에서 이뤄지고 입력값은 이 기기에만 남습니다.

알아두면 좋은 점

  • 무작위 구간 집합(1~20개)과 다양한 질의 구간에서 구간 트리의 결과가 O(n) 전수 탐색과 정확히 같은지 15세트 × 질의 10개씩 확인했습니다.
  • 경계에 닿기만 해도 겹침으로 판정하는지(폐구간), 완전히 포함되는 관계도 겹침으로 잡는지, 겹치는 것이 하나도 없으면 빈 결과인지 확인했습니다.
  • 빈 구간 집합에서도 오류 없이 빈 결과를 내는지 확인했습니다.

함께 보면 좋은 도구

마지막 검증: 2026년 9월 2일 · 결과는 참고용 추정치입니다.