๐Ÿงฉ Algorithm/๊ฐœ๋… ๋ฐ ์ž๋ฃŒ๊ตฌ์กฐ

๋ˆ„์  ํ•ฉ(Prefix Sum, ๋ถ€๋ถ„ ํ•ฉ)

devCloud 2023. 3. 27. 11:51
728x90

1. ๋ˆ„์  ํ•ฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ •์˜

๋ˆ„์  ํ•ฉ ํ˜น์€ ๋ถ€๋ถ„ ํ•ฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ง ๊ทธ๋Œ€๋กœ ๊ตฌํ•˜๊ณ ์ž ํ•˜๋Š” ๊ตฌ๊ฐ„์˜ ๋ˆ„์ ๋œ ํ•ฉ์„ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฐฐ์—ด์˜ i ~ j ๊นŒ์ง€์˜ ํ•ฉ์„ ๊ตฌํ•˜๊ณ ์ž ํ•  ๋•Œ ํ•˜๋‚˜์”ฉ ๋”ํ•ด๊ฐ€๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์— ์ตœ์•…์˜ ๊ฒฝ์šฐ O(n^2) ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ์ƒ๊ธฐ๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„ ํ˜น์€ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ˆ„์ ๋œ ํ•ฉ์„ ๊ตฌํ•ด ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ์‚ฌ์šฉํ•˜๊ณ , O(N), O(1) ์‹œ๊ฐ„๊นŒ์ง€ ๋‹จ์ถ•์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. 

 

2. 1์ฐจ์› ๋ฐฐ์—ด

์ธ๋ฑ์Šค 0 1 2 3 4
๋ฐฐ์—ด 10 20 30 40 50
๋ˆ„์  ํ•ฉ 10 30 60 100 150

์œ„ ๋ฐฐ์—ด์—์„œ ์ธ๋ฑ์Šค 2๋ฒˆ~4๋ฒˆ ๊ตฌ๊ฐ„์˜ ํ•ฉ์„ ๊ตฌํ•œ๋‹ค๊ณ  ํ•ด๋ณด์ž. 4๋ฒˆ ์ธ๋ฑ์Šค์˜ ๋ˆ„์  ํ•ฉ์€ 150(0๋ฒˆ์งธ~4๋ฒˆ์งธ ํ•ฉ)์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๋Š” ์ธ๋ฑ์Šค 2๋ฒˆ๋ถ€ํ„ฐ ๊ตฌํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•„์š”์—†๋Š” ๊ตฌ๊ฐ„์ธ 0 ~ 1๋ฒˆ์งธ๋Š” ๋นผ์ค˜์•ผ ํ•œ๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด 0๋ฒˆ๊ณผ 1๋ฒˆ ์ธ๋ฑ์Šค์˜ ๊ฐ’์„ ๋นผ์ค˜์•ผ ํ•˜๋‚˜? ์•„๋‹ˆ๋‹ค. 1๋ฒˆ ๋˜ํ•œ 0๋ฒˆ์งธ์˜ ๊ฐ’์ด ๋ˆ„์ ์ด ๋ผ์„œ ๊ณ„์‚ฐ๋๊ธฐ ๋•Œ๋ฌธ์— 1๋ฒˆ ์ธ๋ฑ์Šค๋งŒ ๋นผ์ฃผ๋ฉด ๋œ๋‹ค. ๋”ฐ๋ผ์„œ 4๋ฒˆ ์ธ๋ฑ์Šค์—์„œ 1๋ฒˆ ์ธ๋ฑ์Šค๋ฅผ ๋นผ์ฃผ๋ฉด ๋œ๋‹ค. 

 

๋ฐฐ์—ด iํ•ญ๋ถ€ํ„ฐ jํ•ญ๊นŒ์ง€์˜ ํ•ฉ์„ S(i, j)๋ผ๊ณ  ํ•˜๋ฉด, S(i, j) = prefix_sum[j] - prefix_sum[i - 1] 

S[j] - S[i-1] = a[i] + a[i+1] + ... + a[j-1] + a[j]

ํŒŒ์ด์ฌ ์ฝ”๋“œ

array = [10, 20, 30, 40, 50]
n = len(array)
prefix_sum = [0] * (n + 1)

for i in range(n):
    prefix_sum[i + 1] = prefix_sum[i] + array[i]
   
#๊ฒฐ๊ณผ : prefix_sum[0, 10, 30, 60, 100, 150]

 

3. 2์ฐจ์› ๋ฐฐ์—ด

prefix_sum[i][j] = arr[i-1][j-1] + prefix_sum[i-1][j] + prefix_sum[i][j-1] - prefix_sum[i-1][j-1]

ํŒŒ์ด์ฌ ์ฝ”๋“œ

arr = [[10, 20, 30],
       [20, 30, 40],
       [30, 40, 50]]

m = 3 #์—ด
n = 3 #ํ–‰

prefix_sum = [[0 for _ in range(m+1)] for _ in range(n+1)]
for i in range(1, n+1):
    for j in range(1, m+1):
        prefix_sum[i][j] = arr[i - 1][j - 1] + prefix_sum[i - 1][j] 
        + prefix_sum[i][j - 1] - prefix_sum[i - 1][j - 1]

for i in range(n+1):
    print(prefix_sum[i])
    
 #๊ฒฐ๊ณผ
[0, 0, 0, 0]
[0, 10, 30, 60]
[0, 30, 80, 150]
[0, 60, 150, 270]

2์ฐจ์› ๋ฐฐ์—ด ์ฐธ๊ณ  - https://yiyj1030.tistory.com/489

 

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ๋ถ€๋ถ„ํ•ฉ, ๋ˆ„์ ํ•ฉ (Prefix Sum) ์‰ฝ๊ฒŒ ์•Œ์•„๋ณด๊ธฐ(ํŒŒ์ด์ฌ)

๋ถ€๋ถ„ํ•ฉ, ๋ˆ„์ ํ•ฉ์ด๋ผ๊ณ  ๋ถˆ๋ฆฌ์šฐ๋Š” ๋ฐฐ์—ด์˜ ์ผ๋ถ€ ๊ตฌ๊ฐ„์— ๋Œ€ํ•œ ํ•ฉ์„ ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ๊ตฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์Šคํ‚ฌ์ด๋‹ค. N๊ฐœ์˜ ์›์†Œ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฐฐ์—ด์ด ์ฃผ์–ด์กŒ์„ ๋•Œ ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด ๋ถ€๋ถ„ ๋ฐฐ์—ด์˜ ํ•ฉ์„ ๊ตฌํ•˜๋ ค

yiyj1030.tistory.com

2์ฐจ์› ๋ฐฐ์—ด ์ฐธ๊ณ  - https://velog.io/@ohdowon064/Algorithm-2%EC%B0%A8%EC%9B%90-%EB%B0%B0%EC%97%B4-%EB%B6%80%EB%B6%84%ED%95%A9-%EB%88%84%EC%A0%81%ED%95%A9-%EA%B5%AC%ED%95%98%EA%B8%B0

4. ๋ฐฑ์ค€ ๋ˆ„์  ํ•ฉ ๋ฌธ์ œ

1์ฐจ์›

 

2851๋ฒˆ: ์Šˆํผ ๋งˆ๋ฆฌ์˜ค

์ฒซ์งธ ์ค„์— ๋งˆ๋ฆฌ์˜ค๊ฐ€ ๋ฐ›๋Š” ์ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ 100์— ๊ฐ€๊นŒ์šด ์ˆ˜๊ฐ€ 2๊ฐœ๋ผ๋ฉด (์˜ˆ: 98, 102) ๋งˆ๋ฆฌ์˜ค๋Š” ํฐ ๊ฐ’์„ ์„ ํƒํ•œ๋‹ค.

www.acmicpc.net

2851๋ฒˆ ํ’€์ด : https://dev-cloud.tistory.com/136

 

 

11659๋ฒˆ: ๊ตฌ๊ฐ„ ํ•ฉ ๊ตฌํ•˜๊ธฐ 4

์ฒซ์งธ ์ค„์— ์ˆ˜์˜ ๊ฐœ์ˆ˜ N๊ณผ ํ•ฉ์„ ๊ตฌํ•ด์•ผ ํ•˜๋Š” ํšŸ์ˆ˜ M์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” N๊ฐœ์˜ ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ˆ˜๋Š” 1,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค. ์…‹์งธ ์ค„๋ถ€ํ„ฐ M๊ฐœ์˜ ์ค„์—๋Š” ํ•ฉ์„ ๊ตฌํ•ด์•ผ ํ•˜๋Š” ๊ตฌ๊ฐ„ i์™€ j

www.acmicpc.net

11659๋ฒˆ ํ’€์ด : https://dev-cloud.tistory.com/137

 

2์ฐจ์›

 

2167๋ฒˆ: 2์ฐจ์› ๋ฐฐ์—ด์˜ ํ•ฉ

์ฒซ์งธ ์ค„์— ๋ฐฐ์—ด์˜ ํฌ๊ธฐ N, M(1 ≤ N, M ≤ 300)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ N๊ฐœ์˜ ์ค„์—๋Š” M๊ฐœ์˜ ์ •์ˆ˜๋กœ ๋ฐฐ์—ด์ด ์ฃผ์–ด์ง„๋‹ค. ๋ฐฐ์—ด์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” ์ˆ˜๋Š” ์ ˆ๋Œ“๊ฐ’์ด 10,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ •์ˆ˜์ด๋‹ค. ๊ทธ ๋‹ค์Œ ์ค„์—๋Š”

www.acmicpc.net

 

11660๋ฒˆ: ๊ตฌ๊ฐ„ ํ•ฉ ๊ตฌํ•˜๊ธฐ 5

์ฒซ์งธ ์ค„์— ํ‘œ์˜ ํฌ๊ธฐ N๊ณผ ํ•ฉ์„ ๊ตฌํ•ด์•ผ ํ•˜๋Š” ํšŸ์ˆ˜ M์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 1024, 1 ≤ M ≤ 100,000) ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ํ‘œ์— ์ฑ„์›Œ์ ธ ์žˆ๋Š” ์ˆ˜๊ฐ€ 1ํ–‰๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ M๊ฐœ์˜ ์ค„์—๋Š” ๋„ค

www.acmicpc.net

11660๋ฒˆ ํ’€์ด : https://dev-cloud.tistory.com/142

 

728x90