intro
โ๐ป ๊ตฌ๊ฐ ํฉ ๋ฌธ์ ๋ ์ฐ์์ ์ผ๋ก ๋์ด๋ N๊ฐ์ ์๊ฐ ์์ ๋, ํน์ ๊ตฌ๊ฐ์ ๋ชจ๋ ์๋ฅผ ํฉํ ๊ฐ์ ๊ณ์ฐํ๋ ๋ฌธ์ ์ ํ์ ๋ปํ๋ค.
โ๐ป ์๋ฅผ ๋ค๋ฉด, 5๊ฐ์ ๋ฐ์ดํฐ๋ก ๊ตฌ์ฑ๋ ์์ด {10, 20, 30, 40, 50}์ด ์๋ค๊ณ ๊ฐ์ ํ์ ๋, 2๋ฒ์งธ ์๋ถํฐ 4๋ฒ์งธ ์๊น์ง์ ํฉ์ 20 + 30 + 40์ธ 90์ด ๋๋ค.
โ๐ป N๊ฐ์ ์ ์๋ก ๊ตฌ์ฑ๋ ์์ด์ด ์๊ณ , M๊ฐ์ query ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋ค. ๊ฐ query๋ left์ right๋ก ๊ตฌ์ฑ. ๊ฐ query์ ๋ํ์ฌ [left, right] ๊ตฌ๊ฐ์ ํฌํจ๋ ๋ฐ์ดํฐ๋ค์ ํฉ์ ์ถ๋ ฅํด์ผ ํ๋ค. (์ํ ์๊ฐ ์ ํ์ O(N+M))
→ ์ ์์ ์ ๋ชฉํ์๋ฉด, 5๊ฐ์ ๋ฐ์ดํฐ (N=5)๋ก ๊ตฌ์ฑ๋ ์์ด์์ ๋งค๋ฒ ์๋ก์ด query ๊ตฌ๊ฐ๋ง๋ค ํด๋น ํฉ์ ๊ตฌํ๋ค๋ฉด ์๊ฐ ๋ณต์ก๋๋ O(N*M)
→ ์ด ๋, ์๊ฐ์ ํจ์จ์ฑ์ ์ํด ๊ตฌ๊ฐ ํฉ(Prefix Sum; Interval Sum) ์์ด๋์ด๋ฅผ ์ฌ์ฉ!
โป ๊ตฌ๊ฐ ํฉ = ๋ฐฐ์ด์ ๋งจ ์๋ถํฐ ํน์ ์์น๊น์ง์ ํฉ์ ๋ฏธ๋ฆฌ ๊ตฌํด ๋์ ๊ฒ โป
→ ๋ฐ๋ผ์ N๊ฐ์ ์ ์์น ๊ฐ๊ฐ์ ๋ํ์ฌ ์ ๋์ฌ ํฉ์ ๊ณ์ฐํ์ฌ P์ ์ ์ฅํ ๋ค, ๋งค M๊ฐ์ ์ฟผ๋ฆฌ ์ ๋ณด๋ฅผ ํ์ธํ ๋ ๊ตฌ๊ฐ ํฉ์ P[Right] - P[Left-1]
* code>
#๊ตฌ๊ฐ ํฉ ๊ตฌํ๊ธฐ
n=5
data=[10,20,30,40,50]
sum_value=0
prefix_sum=[0]
for i in data:
sum_value+=i
prefix_sum.append(sum_value)
#๊ตฌ๊ฐ ํฉ ๊ณ์ฐ(์ธ๋ฒ์งธ ์๋ถํฐ ๋ค๋ฒ์งธ ์๊น์ง)
left=3
right=4
print(prefix_sum[right] - prefix_sum[left-1]) #70
'Computer Science > Algorithms' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ค๊ตญ์ธ์ ๋๋จธ์ง ์ ๋ฆฌ(CRT;Chinese Remainder Theorem) (0) | 2023.02.26 |
---|---|
๐ธCoordinate Compression๐ธ (0) | 2023.01.24 |
Regular Expression (0) | 2023.01.11 |
๐Dynamic Programming๐ (1) | 2023.01.03 |
bitmasking (0) | 2022.12.20 |
๋๊ธ