Computer Science/Algorithms

๐Ÿซ‚ Prefix Sum

metamong 2023. 1. 18.

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

 

 

 

 


์ด์ฝ”ํ…Œ 2021

 

'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

๋Œ“๊ธ€