세그먼트 트리 예제 - 1

문제 분석

  • 단순하게 구간 합을 구하는 문제라면 합 배열 자료구조를 이용해 쉽게 해결할 수 있을 것이다.

  • 하지만 중간에 수의 변경이 빈번하게 일어나기 때문에 일반적인 합 배열로는 해결할 수 없다.(시간 초과 발생)

  • 이 문제는 데이터의 변경에도 시간이 비교적 적게 걸리는 세그먼트 트리 자료구조를 이용해 해결해야 한다.

손으로 풀어보기

  1. 1차원 리스트를 이용해 트리의 값을 초기화한다. 트리 리스트가 크기가 N = 5이므로 2^k >= 5를 만족하는 k값은 3이 되고, 리스트의 크기는 2^3 * 2 = 16으로 지정하면 된다. 시작 인덱스는 2^3 = 8이 된다.

img_7.png
  1. 질의값 연산 함수와 데이터 업데이트 함수를 수행하고, 질의와 관련된 결괏값을 출력한다.

img_8.png

슈도코드

코드 구현 - 파이썬

코드 구현 - 자바

Last updated