๐Ÿงฉ Algorithm/[BOJ] Silver

BOJ 11659๋ฒˆ : ๊ตฌ๊ฐ„ ํ•ฉ ๊ตฌํ•˜๊ธฐ 4 (Python/Silver 3)

devCloud 2023. 3. 22. 03:08
728x90
 

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

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

www.acmicpc.net

๋ฌธ์ œ

์ˆ˜ N๊ฐœ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, i๋ฒˆ์งธ ์ˆ˜๋ถ€ํ„ฐ j๋ฒˆ์งธ ์ˆ˜๊นŒ์ง€ ํ•ฉ์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

์ž…๋ ฅ

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

 

์ถœ๋ ฅ

์ด M๊ฐœ์˜ ์ค„์— ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ i๋ฒˆ์งธ ์ˆ˜๋ถ€ํ„ฐ j๋ฒˆ์งธ ์ˆ˜๊นŒ์ง€ ํ•ฉ์„ ์ถœ๋ ฅํ•œ๋‹ค.


์˜ˆ์ œ ์ž…๋ ฅ

5 3
5 4 3 2 1
1 3
2 4
5 5

์˜ˆ์ œ ์ถœ๋ ฅ

12
9
1

์„ค๋ช…

N๊ฐœ์˜ ์ˆ˜๋ฅผ i ~ 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]

๋ˆ„์  ํ•ฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๋ช… - https://dev-cloud.tistory.com/141

Solution

import sys
input = sys.stdin.readline
N, M = map(int, input().split())
n = list(map(int, input().split()))

prefix_sum = [0]*(N+1)

for k in range(N):
    prefix_sum[k+1] = prefix_sum[k] + n[k]

for _ in range(M):
    i, j = map(int, input().split())
    print(prefix_sum[j] - prefix_sum[i-1])

 

์‹œ๊ฐ„ ์ดˆ๊ณผ ํ’€์ด

#1
for _ in range(M):
    i, j = map(int, input().split())
    ans = 0
    while i <= j:
        ans += n[i-1]
        i += 1
    print(ans)
    
#2
for _ in range(M):
 i, j = map(int, input().split())
 prefix_sum = [0] * (N + 2)
 while i <= j:
   prefix_sum[i+1] = prefix_sum[i] + n[i-1]
   i += 1
 print(prefix_sum[j+1])
 
#3
def p_s(x, y):
    prefix_sum = [0] * (N + 2)
    for k in range(x, y+1):
        prefix_sum[k+1] = prefix_sum[k] + n[k-1]
    return prefix_sum[j+1]

for _ in range(M):
    i, j = map(int, input().split())
    print(p_s(i, j))

 

 

728x90