๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm/๋ฐฑ์ค€(BOJ)

[ ํŒŒ์ด์ฌ(python) ] ๋ฐฑ์ค€ 11659 - ๊ตฌ๊ฐ„ ํ•ฉ ๊ตฌํ•˜๊ธฐ4

by YWTechIT 2021. 4. 23.
728x90

๐Ÿ“ ๋ฐฑ์ค€ 11659 - ๊ตฌ๊ฐ„ ํ•ฉ ๊ตฌํ•˜๊ธฐ 4

๋ฐฑ์ค€ 11659 - ๊ตฌ๊ฐ„ ํ•ฉ ๊ตฌํ•˜๊ธฐ4


โšก๏ธ ๋‚˜์˜ ํ’€์ด

์ด ๋ฌธ์ œ๋ฅผ ๊ทธ๋ƒฅ ๊ตฌํ˜„ํ•œ๋‹ค๋ฉด ์‹œ๊ฐ„ ์ดˆ๊ณผ์—์„œ ๋ฒ—์–ด๋‚˜์ง€ ๋ชปํ•  ๊ฒƒ์ด๋‹ค. ๋ฐ”๋กœ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ๋†’๊ธฐ ๋•Œ๋ฌธ์ธ๋ฐ, ์ด๋Ÿด ๋•Œ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๋‚ฎ์ถœ ์ ์ ˆํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋ฐ”๋กœ prefix_sum์ด๋‹ค. prefix_sum์˜ ๋‚œ์ด๋„๋Š” ์–ด๋ ต์ง€ ์•Š๋‹ค.

728x90

์„œ๋‘์—์„œ ๋งํ–ˆ๋“ฏ์ด ์ด ๋ฌธ์ œ๋ฅผ 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])
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€