๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ

ํŽœ์œ…ํŠธ๋ฆฌ

ํŽœ์œ…ํŠธ๋ฆฌ๋Š” ์ด์ง„ํŠธ๋ฆฌ๊ธฐ๋ฐ˜์˜ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋ฉฐ, ์„ธ๊ทธ๋จผํŠธ ํŠธ๋ฆฌ์˜ ์›๋ฆฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

์„ธ๊ทธ๋จผํŠธ ํŠธ๋ฆฌ?

์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•  ๋•Œ ํŠน์ • ๊ตฌ๊ฐ„์˜ ํ•ฉ ํ˜น์€ ์ตœ์†Œ๊ฐ’, ์ตœ๋Œ€๊ฐ’ ๋“ฑ์„ ๊ตฌํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•˜๋Š” ์ด์ง„ ํŠธ๋ฆฌ ํ˜•ํƒœ์˜ ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ์ €๋Š” ์ด๊ฒƒ์„ ์–ด๋–ป๊ฒŒ ์จ์•ผํ• ์ง€ ๋‹จ๋ฒˆ์— ์ดํ•ด๊ฐ€์ง€ ์•Š์•„์„œ BOJ BOOK์˜ ์„ค๋ช…์— ๋”ฐ๋ผ ๊ทธ๋ฆผ๊ณผ ํ•จ๊ป˜ ์ดํ•ดํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ, ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•ฉ์‹œ๋‹ค.

ํฌ๊ธฐ๊ฐ€ n์ธ ์ •์ˆ˜ ๋ฐฐ์—ด a๊ฐ€ ์žˆ์œผ๋ฉฐ, ๋‹ค์Œ ์—ฐ์‚ฐ์„ ์ตœ๋Œ€ m๋ฒˆ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
	1. ๊ตฌ๊ฐ„ l, r์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, a[l] + ... + a[r] ํ•ฉ ์ถœ๋ ฅํ•˜๊ธฐ
	2. i๋ฒˆ์งธ ์ˆ˜๋ฅผ v๋กœ ๋ฐ”๊พธ๊ธฐ

int[] a = {4, 6, 2, 1, 7, 5, 8};

 

์ฃผ์–ด์ง„ a ๋ฐฐ์—ด์€ ์œ„์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ผ๋‹จ ๋ฌธ์ œ์—์„œ ๊ตฌ๊ฐ„ l, r์ด ์ฃผ์–ด์กŒ์„ ๋•Œ์˜ ๊ตฌ๊ฐ„ํ•ฉ์„ ๊ตฌํ•œ๋‹ค๋ผ๊ณ  ํ•˜๋ฉด ๋ณดํ†ต ๋‹จ์ˆœํ•˜๊ฒŒ l๋ถ€ํ„ฐ r๊นŒ์ง€ ๋ฐฐ์—ด์˜ ์›์†Œ๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ํƒ์ƒ‰ํ•˜๋ฉฐ ๋”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์€ ๊ตฌ๊ฐ„์ด 0๋ถ€ํ„ฐ a.length๊นŒ์ง€ ์ฃผ์–ด์ง„๋‹ค๋ฉด ์ด ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(n) ์ด ๋ฉ๋‹ˆ๋‹ค.

int sum = 0;
for (int i = l; i <= r; i++)
sum += a[i];

 

2๋ฒˆ์งธ ์—ฐ์‚ฐ์˜ ๊ฒฝ์šฐ๋Š” ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— O(1)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋กœ ์›์†Œ ์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์—ฐ์‚ฐ์„ ์ด M๋ฒˆ ์ˆ˜ํ–‰ํ•˜๋‹ˆ๊นŒ ์‹ค์ œ ํ•ด๋‹น ๋กœ์ง์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(NM)์ด ๋ฉ๋‹ˆ๋‹ค.

 

๋ˆ„์ ํ•ฉ์„ ์ด์šฉํ•œ๋‹ค๋ฉด ์–ด๋–จ๊นŒ์š”? ๋ˆ„์ ํ•ฉ์€ 1๋ฒˆ ์—ฐ์‚ฐ์„ O(1)๋กœ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ์›์†Œ ์ˆ˜์ •์ด ์ผ์–ด๋‚˜๋ฉด ํ•ด๋‹น ๊ตฌ๊ฐ„๊นŒ์ง€์˜ ๊ตฌ๊ฐ„ํ•ฉ์„ ๋‹ค์‹œ ์—ฐ์‚ฐํ•ด์•ผ ํ•˜๋ฏ€๋กœ 2๋ฒˆ ์—ฐ์‚ฐ์˜ ๊ฒฝ์šฐ๋Š” O(N) ์ด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์œ„์™€ ๋™์ผํ•˜๊ฒŒ O(NM)์ด ๋ฉ๋‹ˆ๋‹ค. ๋ˆ„์ ํ•ฉ์ด๋ผ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ–ˆ์Œ์—๋„ ์‹ค์ œ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ์ „ํ˜€ ์ค„์–ด๋“ค์ง€ ์•Š์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ '์„ธ๊ทธ๋จผํŠธ ํŠธ๋ฆฌ'์ž…๋‹ˆ๋‹ค.

 

์„ธ๊ทธ๋จผํŠธ ํŠธ๋ฆฌ๋Š” ์ด์ง„ ํŠธ๋ฆฌ์˜ ๊ฐ ๋…ธ๋“œ์— ๊ตฌ๊ฐ„ํ•ฉ์˜ ๊ฐ’์„ ์ €์žฅํ•ด๋‘ก๋‹ˆ๋‹ค.

 

์ตœ์ƒ๋‹จ ๋…ธ๋“œ์—์„œ๋Š” ์ธ๋ฑ์Šค [0-6]๊นŒ์ง€์˜ ํ•ฉ, ์ž์‹ ๋…ธ๋“œ๋ถ€ํ„ฐ๋Š” [0-3], [4-6] ๊นŒ์ง€์˜ ํ•ฉ. ์ด๋Ÿฐ์‹์œผ๋กœ ์ฃผ์–ด์ง„ ๋ฐ์ดํ„ฐ์˜ ๋ฒ”์œ„๋ฅผ ๋ฐ˜์œผ๋กœ ๋ถ„ํ• ํ•ด๊ฐ€๋ฉฐ ๊ตฌ๊ฐ„๋“ค์˜ ํ•ฉ์„ ์ €์žฅํ•ด๋†“๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋ฆฌํ”„ ๋…ธ๋“œ์˜ ๊ฐ’์—๋Š” ๊ฐ๊ฐ ๋ฐฐ์—ด a์˜ ์›์†Œ๊ฐ€ ๋“ค์–ด๊ฐ€๋ฉฐ ๋ถ€๋ชจ ๋…ธ๋“œ๋Š” ์™ผ์ชฝ ์ž์‹๊ณผ ์˜ค๋ฅธ์ชฝ ์ž์‹์„ ํ•ฉํ•ด ๊ตฌ๊ฐ„์˜ ํ•ฉ์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๊ฒŒ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์ธ๋ฑ์Šค ๊ตฌ๊ฐ„์œผ๋กœ ํ‘œํ˜„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

 

์œ„์˜ ๋ฌธ์ œ๋กœ ๋‹ค์‹œ ๋Œ์•„๊ฐ€ 1๋ฒˆ ์—ฐ์‚ฐ์—์„œ l๊ณผ r์ด (3, 6)์ด๋ผ๋ฉด ํŠธ๋ฆฌ๋ฅผ ํƒ€๊ณ ๊ฐ€ [3-3] + [4-6]๋งŒ ํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ํŠธ๋ฆฌ๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(logN) ์ด๋ฏ€๋กœ 1๋ฒˆ ์—ฐ์‚ฐ์€ O(logN)๋งŒ์— ํ•ด๊ฒฐ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. 2๋ฒˆ ์—ฐ์‚ฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ O(logN) ์ž…๋‹ˆ๋‹ค. ์™œ๋ƒ๋ฉด, 3๋ฒˆ ์ธ๋ฑ์Šค๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒฝ์šฐ 3๋ฒˆ ์ธ๋ฑ์Šค๋ฅผ ํฌํ•จํ•˜๋Š” ๋…ธ๋“œ์— ๋Œ€ํ•ด์„œ ์›๋ž˜ ๊ตฌ๊ฐ„ํ•ฉ += ์ˆ˜์ •ํ•  ๊ฐ’ - ์›๋ž˜ 3๋ฒˆ ์ธ๋ฑ์Šค ๊ฐ’์˜ ์—ฐ์‚ฐ๋งŒ ์ ์šฉํ•˜๋ฉด ๋ฐ”๋กœ ํ•ด๋‹น ๊ตฌ๊ฐ„ํ•ฉ๋“ค์ด ๋ชจ๋‘ ์ˆ˜์ •๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ํŠธ๋ฆฌ๋งŒ ํƒ์ƒ‰ํ•˜๊ณ  ๋ฐฐ์—ด ๊ฐ’์— ๋Œ€ํ•ด ๋”ํ•˜๊ธฐ ์—ฐ์‚ฐ๋งŒ ํ•ด์ฃผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ O(logN) ์ž…๋‹ˆ๋‹ค.

 

์ด๋Ÿฌํ•œ ํŠน์ง•์„ ๊ฐ€์ง„ ์„ธ๊ทธ๋จผํŠธ ํŠธ๋ฆฌ๋ฅผ ํ™œ์šฉํ•˜๋ฉด, ๊ตฌ๊ฐ„ํ•ฉ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ•ด๋‹น ๊ตฌ๊ฐ„์—์„œ์˜ ์ตœ์†Œ๊ฐ’, ์ตœ๋Œ€๊ฐ’์„ ์ €์žฅํ•ด์„œ ์–ด๋–ค ๊ตฌ๊ฐ„์—์„œ์˜ ์ตœ์†Œ๊ฐ’, ์ตœ๋Œ€๊ฐ’๋„ O(logN)๋งŒ์— ํ•ด๊ฒฐ์ด ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค.

 

์ด์ œ, ํŽœ์œ…ํŠธ๋ฆฌ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

ํŽœ์œ…ํŠธ๋ฆฌ

ํŽœ์œ…ํŠธ๋ฆฌ๋Š” ์œ„์˜ ์„ธ๊ทธ๋จผํŠธ ํŠธ๋ฆฌ์—์„œ ํ•œ ๋‹จ๊ณ„ ๋” ์‘์šฉ๋œ ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

 

์„ธ๊ทธ๋จผํŠธ ํŠธ๋ฆฌ๋Š” ๊ฐ ๊ตฌ๊ฐ„๋ณ„ ๋ชจ๋“  ํ•ฉ์„ ์„ธ๊ทธ๋จผํŠธ ์ฆ‰, ๋…ธ๋“œ์— ์ €์žฅํ•ด์„œ ๊ด€๋ฆฌํ•˜์ง€๋งŒ ํŽœ์œ…ํŠธ๋ฆฌ๋Š” ๋ชจ๋“  ์„ธ๊ทธ๋จผํŠธ๋ฅผ ๋งŒ๋“ค ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌ์„ฑํ•ด๋„ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๊ฒŒ๋ฉ๋‹ˆ๋‹ค

 

 

ํŽœ์œ…ํŠธ๋ฆฌ์˜ ํŠน์ง•์€ ํ™€์ˆ˜๋ฒˆ ์ธ๋ฑ์Šค๋“ค์€ ๋ฐฐ์—ด์˜ ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์ €์žฅํ•˜๊ณ , ์ง์ˆ˜๋ฒˆ ์ธ๋ฑ์Šค๋“ค์ด ๊ฐ๊ฐ ๊ตฌ๊ฐ„ํ•ฉ์„ ์ €์žฅํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ, ์„ธ๊ทธ๋จผํŠธ ํŠธ๋ฆฌ์ฒ˜๋Ÿผ O(logN) ๋งŒ์— ๊ตฌ๊ฐ„ํ•ฉ๋“ค์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Œ์—๋„ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ๋” ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ํŠน์ง•์ž…๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿผ, ์–ด๋–ค์‹์œผ๋กœ ํŽœ์œ…ํŠธ๋ฆฌ๊ฐ€ ๋™์ž‘ํ•˜๋Š”์ง€ ํ•œ๋ฒˆ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ํŽœ์œ…ํŠธ๋ฆฌ๋Š” Tree ๋ฐฐ์—ด ์† ๊ฐ ์›์†Œ๋ฅผ ํ•ด๋‹น ์ธ๋ฑ์Šค์—์„œ ์ธ๋ฑ์Šค์˜ ์ตœํ•˜์œ„ ๋น„ํŠธ ๋ฒ”์œ„๋งŒํผ ๊ตฌ๊ฐ„ํ•ฉ์œผ๋กœ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ฌด์Šจ ๋ง์ด๋ƒ. ์ด๋ฅผ ์œ„ํ•ด ์•„๋ž˜ 3๊ฐœ์˜ ์ˆ˜์˜ ์ตœํ•˜์œ„ ๋น„ํŠธ๋ฅผ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

3 = 11 -> 1
8 = 1000 -> 8
12 = 1100 -> 4

 

ํŽœ์œ…ํŠธ๋ฆฌ๋Š” ์ด ์‹ญ์ง„์ˆ˜ ๊ฐ’์„ ์ด์šฉํ•ด ์ž์‹ ์„ ํฌํ•จํ•œ ๋ฒ”์œ„์— ํ•ด๋‹นํ•˜๋Š” ๊ตฌ๊ฐ„ํ•ฉ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ์ฆ‰, Tree[3]์„ [3, 3] ๊ตฌ๊ฐ„์˜ ํ•ฉ์œผ๋กœ ์ •์˜ํ•˜๋ฉฐ, Tree[8]์€ [1, 8], Tree[12]๋Š” [9, 12] ๊ตฌ๊ฐ„์˜ ํ•ฉ์œผ๋กœ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. Tree[13]์ด๋ฉด ์–ด๋–จ๊นŒ์š”? 13์€ 1101์ด๋ฏ€๋กœ ์ตœํ•˜์œ„ ๋น„ํŠธ๊ฐ€ 1์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ Tree[13]์€ [13, 13] ๊ตฌ๊ฐ„์˜ ํ•ฉ์„ ๊ฐ–๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿผ, ์ œ๊ฐ€ ๋งŒ์•ฝ ์—ฌ๊ธฐ์„œ [1, 13] ๊ตฌ๊ฐ„์˜ ํ•ฉ์„ ๊ตฌํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”? sum = Tree[13] + Tree[13 - 1] + Tree[13 - 1 - 4]๋กœ ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ๋ณด๋ฉด ์ข€ ์žฌ๋ฐŒ๋Š” ์‚ฌ์‹ค์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Tree[13 - 1]์—์„œ -1์€ ๊ณง 13์˜ ์ตœํ•˜์œ„ ๋น„ํŠธ๋ฅผ ๋นผ๋Š” ๊ฒƒ์ด๋ฉฐ, Tree[13 - 1 - 4]๋Š” Tree[12 - 4]๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด 4๋Š” ๊ณง 12์˜ ์ตœํ•˜์œ„ ๋น„ํŠธ 4๋ฅผ ๋นผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค! ์ฆ‰, 13(1101)์—์„œ ์ตœํ•˜์œ„ ๋น„ํŠธ๋ฅผ ๋นผ๊ณ  12(1100). ์—ฌ๊ธฐ์„œ ๋‹ค์‹œ ์ตœํ•˜์œ„ ๋น„ํŠธ๋ฅผ ๋นผ๋ฉด 8(1000)์ด ๋˜์–ด [1, 13]์˜ ๊ตฌ๊ฐ„ํ•ฉ์„ ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋ฐ”๋กœ ์ด๋Ÿฌํ•œ ํŠน์ง•์„ ์ด์šฉํ•˜์—ฌ ํŽœ์œ…ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.