๐ ๋ฐฑ์ค 11659 - ๊ตฌ๊ฐ ํฉ ๊ตฌํ๊ธฐ 4
๋ฐฑ์ค 11659 - ๊ตฌ๊ฐ ํฉ ๊ตฌํ๊ธฐ4
โก๏ธ ๋์ ํ์ด
์ด ๋ฌธ์ ๋ฅผ ๊ทธ๋ฅ ๊ตฌํํ๋ค๋ฉด ์๊ฐ ์ด๊ณผ
์์ ๋ฒ์ด๋์ง ๋ชปํ ๊ฒ์ด๋ค. ๋ฐ๋ก ์๊ฐ ๋ณต์ก๋๊ฐ ๋๊ธฐ ๋๋ฌธ์ธ๋ฐ, ์ด๋ด ๋ ์๊ฐ ๋ณต์ก๋๋ฅผ ๋ฎ์ถ ์ ์ ํ ์๊ณ ๋ฆฌ์ฆ์ด ๋ฐ๋ก prefix_sum
์ด๋ค. prefix_sum
์ ๋์ด๋๋ ์ด๋ ต์ง ์๋ค.
์๋์์ ๋งํ๋ฏ์ด ์ด ๋ฌธ์ ๋ฅผ prefix_sum
์ ์ฌ์ฉํ์ง ์๊ณ ๊ตฌํํ ๋ M, N
์ ์
๋ ฅ ๋ฒ์๊ฐ 100,000
์ด ๋์ด๊ฐ๋ค๋ฉด ์๊ฐ ๋ณต์ก๋๋ O(MN)
์ด ๋๋ฏ๋ก 1์ด ๋ด์ ๊ตฌํํ ์๊ฐ ์๋ค. ์๊ณ ๋ฆฌ์ฆ์ ์ค๊ณํ ๋๋ง๋ค ๊ณ ๋ คํด์ผ ํ๋ ์ ์ ์ฌ๋ฌ ๋ฒ ์ฌ์ฉ๋ ๋งํ ์ ๋ณด๋ ๋ฏธ๋ฆฌ ๊ตฌํด์ ์ ์ฅํด ๋์์๋ก ์ ๋ฆฌํ๋ค.
๊ตฌํ ๋ฐฉ๋ฒ์ ๊ฐ๋จํ๋ฐ, ๊ฐ๊ฐ์ ํฉ๋ค์ ์๋ก์ด ๋ฐฐ์ด์ ์ ์ฅํด๋๋ค๊ฐ ๋์ค์ ์
๋ ฅ์ ๊ตฌ๊ฐ์ด ๋ค์ด์ค๋ฉด ํด๋น ๊ตฌ๊ฐ์ index
๋ก ๋ฐ๊ฟ์ ์ถ๋ ฅํด์ฃผ๋ฉด ๋๋ค. ์ด๋, index
๋ฅผ ํท๊ฐ๋ฆฌ๊ฒ ํ์ง ์๊ธฐ ์ํด ์๋ก์ด ๋ฐฐ์ด์ 0์ ์ถ๊ฐํด๋๋ค. ๋งค ์
๋ ฅ์ด ๋ค์ด์ฌ ๋ P[right] - P[left-1]
์ ์ํํ๋ฉด ๊ณ์ฐ์๊ฐ์ O(1)
์ด ๋๊ณ , ๊ฒฐ๊ณผ์ ์ผ๋ก M๊ฐ์ ๋ฐ์ดํฐ์ N๊ฐ์ ์
๋ ฅ์ด ์์ ๋, ์ ์ฒด ๊ตฌ๊ฐ ํฉ์ ๊ตฌํ๋ ์์
์ O(M+N)
์ ์๊ฐ์ด ๋ณด์ฅ๋๋ค.
import sys
input = sys.stdin.readline
m, n = map(int, input().split())
arr = list(map(int, input().split()))
prefix_sum = [0] # init prefix_sum
temp = 0
for i in arr: # accumulate arr section
temp += i
prefix_sum.append(temp)
for i in range(n):
a, b = map(int, input().split())
print(prefix_sum[b] - prefix_sum[a-1])
'Algorithm > ๋ฐฑ์ค(BOJ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ ํ์ด์ฌ(python) ] ๋ฐฑ์ค 5597 - ๊ณผ์ ์ ๋ด์ ๋ถ..? (0) | 2021.04.26 |
---|---|
[ ํ์ด์ฌ(python) ] ๋ฐฑ์ค 20053 - ์ต์, ์ต๋ 2 (0) | 2021.04.26 |
[ ํ์ด์ฌ(python) ] ๋ฐฑ์ค 4179 - ๋ถ! (BFS) (9) | 2021.04.22 |
[ ํ์ด์ฌ(python) ] ๋ฐฑ์ค 1743 - ์์๋ฌผํผํ๊ธฐ (BFS) (0) | 2021.04.22 |
[ ํ์ด์ฌ(python) ] ๋ฐฑ์ค 1303 - ์ ์ - ์ ํฌ(BFS) (3) | 2021.04.21 |
๋๊ธ