Range Sum (๊ตฌ๊ฐ„ ํ•ฉ)

๊ฐœ๋…

ํ•ฉ ๋ฐฐ์—ด์„ ์ด์šฉํ•ด ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ **O(N) โ†’ O(1)**๋กœ ์ค„์ด๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜

ํ•ต์‹ฌ ์ด๋ก 

1. ํ•ฉ ๋ฐฐ์—ด S ์ •์˜

S[i] = A[0] + A[1] + A[2] + ... + A[i]  // A[0]๋ถ€ํ„ฐ A[i]๊นŒ์ง€์˜ ๋ˆ„์ ํ•ฉ

2. ํ•ฉ ๋ฐฐ์—ด ์ƒ์„ฑ ๊ณต์‹

S[i] = S[i-1] + A[i]

3. ๊ตฌ๊ฐ„ ํ•ฉ ๊ณ„์‚ฐ ๊ณต์‹

A[i]๋ถ€ํ„ฐ A[j]๊นŒ์ง€์˜ ํ•ฉ = S[j] - S[i-1]

์˜ˆ์ œ

์›๋ณธ ๋ฐฐ์—ด

A = [3, 6, 5, 10, 4]

ํ•ฉ ๋ฐฐ์—ด ์ƒ์„ฑ

S[0] = 3
S[1] = 3 + 6 = 9
S[2] = 9 + 5 = 14
S[3] = 14 + 10 = 24
S[4] = 24 + 4 = 28

๊ฒฐ๊ณผ: S = [3, 9, 14, 24, 28]

๊ตฌ๊ฐ„ ํ•ฉ ๊ณ„์‚ฐ ์˜ˆ์‹œ

A[2]๋ถ€ํ„ฐ A[4]๊นŒ์ง€์˜ ํ•ฉ์„ ๊ตฌํ•˜๋ ค๋ฉด:

  • ์ง์ ‘ ๊ณ„์‚ฐ: 5 + 10 + 4 = 19
  • ๊ตฌ๊ฐ„ ํ•ฉ ํ™œ์šฉ: S[4] - S[1] = 28 - 9 = 19

์žฅ์ 

  1. ์‹œ๊ฐ„ ๋ณต์žก๋„: O(1)๋กœ ๋น ๋ฅธ ๊ณ„์‚ฐ
  2. ํšจ์œจ์„ฑ: ์—ฌ๋Ÿฌ ๊ตฌ๊ฐ„ ์ฟผ๋ฆฌ๋ฅผ ๋ฐ˜๋ณต ์ฒ˜๋ฆฌํ•  ๋•Œ ์œ ์šฉ
  3. ์ „์ฒ˜๋ฆฌ: ํ•œ ๋ฒˆ๋งŒ ํ•ฉ ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•˜๋ฉด ๋จ

ํ•ต์‹ฌ ์•„์ด๋””์–ด

ํฐ ๊ตฌ๊ฐ„์˜ ๋ˆ„์ ํ•ฉ์—์„œ ์ž‘์€ ๊ตฌ๊ฐ„์˜ ๋ˆ„์ ํ•ฉ์„ ๋นผ๋ฉด ํŠน์ • ๊ตฌ๊ฐ„์˜ ํ•ฉ์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.


Q ๋ฐฐ์—ด์˜ ๊ฐ’์ด ์ž์ฃผ ๋ฐ”๋€Œ๋ฉด?

๊ตฌ๊ฐ„ ํ•ฉ์˜ ํ•œ๊ณ„

๋ฐฐ์—ด ๊ฐ’์ด ์ž์ฃผ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ:

  • ๊ฐ’์ด ๋ฐ”๋€” ๋•Œ๋งˆ๋‹ค ํ•ฉ ๋ฐฐ์—ด S๋ฅผ ์ „์ฒด ์žฌ๊ณ„์‚ฐ ํ•ด์•ผ ํ•จ
  • ์‹œ๊ฐ„ ๋ณต์žก๋„: O(N) (๋น„ํšจ์œจ์ )

ํ•ด๊ฒฐ์ฑ…

1. Segment Tree (์„ธ๊ทธ๋จผํŠธ ํŠธ๋ฆฌ)

  • ๊ตฌ์กฐ: ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ
  • ์—…๋ฐ์ดํŠธ: O(log N)
  • ๊ตฌ๊ฐ„ ํ•ฉ ์ฟผ๋ฆฌ: O(log N)
  • ํŠน์ง•: ๊ตฌ๊ฐ„ ํ•ฉ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ตœ์†Ÿ๊ฐ’, ์ตœ๋Œ“๊ฐ’ ๋“ฑ ๋‹ค์–‘ํ•œ ์—ฐ์‚ฐ ์ง€์›

2. Index Tree (์ธ๋ฑ์Šค ํŠธ๋ฆฌ) = Fenwick Tree

  • ๊ตฌ์กฐ: ๋ฐฐ์—ด ๊ธฐ๋ฐ˜์˜ ํŠธ๋ฆฌ ๊ตฌ์กฐ
  • ์—…๋ฐ์ดํŠธ: O(log N)
  • ๊ตฌ๊ฐ„ ํ•ฉ ์ฟผ๋ฆฌ: O(log N)
  • ํŠน์ง•: ์„ธ๊ทธ๋จผํŠธ ํŠธ๋ฆฌ๋ณด๋‹ค ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์ , ๊ตฌํ˜„์ด ๊ฐ„๋‹จ

Next

Stack and Queue