ํ์ ํธ๋ฆฌ๋ ์ด์งํธ๋ฆฌ๊ธฐ๋ฐ์ ์๋ฃ๊ตฌ์กฐ์ด๋ฉฐ, ์ธ๊ทธ๋จผํธ ํธ๋ฆฌ์ ์๋ฆฌ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
์ธ๊ทธ๋จผํธ ํธ๋ฆฌ?
์ฌ๋ฌ ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ ๋ ํน์ ๊ตฌ๊ฐ์ ํฉ ํน์ ์ต์๊ฐ, ์ต๋๊ฐ ๋ฑ์ ๊ตฌํ๋๋ฐ ์ฌ์ฉํ๋ ์ด์ง ํธ๋ฆฌ ํํ์ ์๋ฃ๊ตฌ์กฐ์ ๋๋ค. ์ ๋ ์ด๊ฒ์ ์ด๋ป๊ฒ ์จ์ผํ ์ง ๋จ๋ฒ์ ์ดํด๊ฐ์ง ์์์ 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]์ ๊ตฌ๊ฐํฉ์ ๊ตฌํ ์ ์์ต๋๋ค.
๋ฐ๋ก ์ด๋ฌํ ํน์ง์ ์ด์ฉํ์ฌ ํ์ ํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ์ ๋๋ค.
'์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
1238. ํํฐ (0) | 2025.01.17 |
---|---|
ํ๋ก์ด๋ ์์ ์๊ณ ๋ฆฌ์ฆ (0) | 2025.01.17 |
16235๋ฒ ๋ฌธ์ ์ ์๊ฐ ์ค์ด๊ธฐ (1) | 2024.09.26 |
1513 ๋ฌธ์ ์์ ์ 4์ฐจ์ ๋ฐฐ์ด์ ์ฌ์ฉํด์ผ ํ๋? (0) | 2024.09.25 |
2293 - ๋์ 1 (0) | 2024.09.23 |