11441๋ฒ: ํฉ ๊ตฌํ๊ธฐ
์ฒซ์งธ ์ค์ ์์ ๊ฐ์ N์ด ์ฃผ์ด์ง๋ค. (1 ≤ N ≤ 100,000) ๋์งธ ์ค์๋ A1, A2, ..., AN์ด ์ฃผ์ด์ง๋ค. (-1,000 ≤ Ai ≤ 1,000) ์ ์งธ ์ค์๋ ๊ตฌ๊ฐ์ ๊ฐ์ M์ด ์ฃผ์ด์ง๋ค. (1 ≤ M ≤ 100,000) ๋ท์งธ ์ค๋ถํฐ M๊ฐ์ ์ค์๋
www.acmicpc.net
๋ฌธ์
N๊ฐ์ ์ A1, A2, ..., AN์ด ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ค. ์ด M๊ฐ์ ๊ตฌ๊ฐ i, j๊ฐ ์ฃผ์ด์ก์ ๋, i๋ฒ์งธ ์๋ถํฐ j๋ฒ์งธ ์๊น์ง ํฉ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์์ ๊ฐ์ N์ด ์ฃผ์ด์ง๋ค. (1 ≤ N ≤ 100,000) ๋์งธ ์ค์๋ A1, A2, ..., AN์ด ์ฃผ์ด์ง๋ค. (-1,000 ≤ Ai ≤ 1,000) ์ ์งธ ์ค์๋ ๊ตฌ๊ฐ์ ๊ฐ์ M์ด ์ฃผ์ด์ง๋ค. (1 ≤ M ≤ 100,000) ๋ท์งธ ์ค๋ถํฐ M๊ฐ์ ์ค์๋ ๊ฐ ๊ตฌ๊ฐ์ ๋ํ๋ด๋ i์ j๊ฐ ์ฃผ์ด์ง๋ค. (1 ≤ i ≤ j ≤ N)
์ถ๋ ฅ
์ด M๊ฐ์ ์ค์ ๊ฑธ์ณ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ๊ตฌ๊ฐ์ ํฉ์ ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ
5
10 20 30 40 50
5
1 3
2 4
3 5
1 5
4 4
์์ ์ถ๋ ฅ
60
90
120
150
40
๋ฌธ์ ์ค๋ช
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
ํ์ด์ฌ ์ถ๋ ฅ ์๋ ๊ฐ์ ๋ฐฉ๋ฒ
โป sys.stdout.write( )
- ์ค๋ฐ๊ฟ ์์ด ๋ฐ๋ก ์ด์ด์ ์ถ๋ ฅ
- ๋ฉ๋ชจ๋ฆฌ ํผ / ์๋ ๋น ๋ฆ
- () ์์ ๋ฌธ์์ด์ด ๋ค์ด๊ฐ์ผ ํ๋ฏ๋ก ์ ์์ผ ๊ฒฝ์ฐ๋ str(์ ์) ํด์ค์ผ ํ๋ค.
- ์ค๋ฐ๊ฟ ํ๋ฉด์ ์ฐ์ ์ถ๋ ฅ ํ๊ณ ์ถ๋ค๋ฉด ๋์ +'\n'์ ๋ฃ์ด์ฃผ์.
Solution
import sys
input = sys.stdin.readline
N = int(input())
A = list(map(int, input().split()))
prefix_sum = [0] * (N + 1)
for k in range(N):
prefix_sum[k+1] = prefix_sum[k] + A[k]
M = int(input())
ans = 0
for _ in range(M):
i, j = map(int, input().split())
ans = prefix_sum[j]-prefix_sum[i-1]
sys.stdout.write(str(ans) + '\n')
์๊ฐ ์ด๊ณผ ํ์ด
#1. ์๊ฐ ์ด๊ณผ ์๊ฐ ์ ํ๊ณ ๊ธฐ๋ณธ์ ์ผ๋ก ์๊ฐํ ์ ์๋ ํ์ด์ง๋ง ๋น์ฐํ ์๊ฐ ์ด๊ณผ
for _ in range(M):
i, j = map(int, input().split())
result = 0
while i <= j:
result += A[i-1]
i += 1
print(str(result))
#2. ์ด์ค for๋ฌธ์ ๋น์ฐํ O(n^2) ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ์๊ฐ์ด๊ณผ๊ฐ ๋ ์ ๋ฐ์..
for _ in range(M):
i, j = map(int, input().split())
prefix_sum = [0] * (j+1)
for k in range(i, j+1):
prefix_sum[k] = prefix_sum[k-1] + A[k-1]
print(prefix_sum[j])
#3. ๋์ ํฉ ์๊ณ ๋ฆฌ์ฆ์ ์ผ๋๋ฐ๋ ์๊ฐ ์ด๊ณผ๊ฐ ๋๊ธธ๋ ์ต์ธํ ์ง๊ฒฝ
prefix_sum = [0] * (N + 1)
for k in range(N):
prefix_sum[k+1] = prefix_sum[k] + A[k]
for _ in range(M):
i, j = map(int, input().split())
print(prefix_sum[j]-prefix_sum[i-1])โ
'๐งฉ Algorithm > [BOJ] Silver' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| BOJ 11660๋ฒ : ๊ตฌ๊ฐ ํฉ ๊ตฌํ๊ธฐ 5 (Python/Silver 1) (0) | 2023.03.27 |
|---|---|
| BOJ 1181๋ฒ : ๋จ์ด ์ ๋ ฌ (Python/Silver 5) (0) | 2023.03.24 |
| BOJ 11659๋ฒ : ๊ตฌ๊ฐ ํฉ ๊ตฌํ๊ธฐ 4 (Python/Silver 3) (0) | 2023.03.22 |
| BOJ 10816๋ฒ : ์ซ์ ์นด๋2 (Python/Silver 4) (0) | 2023.03.20 |
| BOJ 16401๋ฒ : ๊ณผ์ ๋๋ ์ฃผ๊ธฐ (Python/Silver 2) (0) | 2023.03.20 |