V2LLAIN
2023. 1. 16. 17:16
2023. 1. 16. 17:16
๐ง Prefix Sum
Prefix Sum, ๊ตฌ๊ฐํฉ, ๋์ ํฉ, ๋ถ๋ถํฉ ์ด๋ผ ๋ถ๋ฆฌ๋ฉฐ ํด๋น ๊ตฌ๊ฐ์ ๋ํ ํฉ์ ๋น ๋ฅด๊ฒ ๊ตฌํ๊ธฐ ์ํ ์๊ณ ๋ฆฌ์ฆ์ ๋งค์ฐ ๊ฐ๋จํ๋ค.
์๋ฆฌ๋ ์๋์ ๊ฐ๋ค.
1. ํฉ ๋ฐฐ์ด S๋ฅผ ๋ง๋๋ ๊ณต์
S[i] = S[i-1] + a[i]
2. i~j๊น์ง์ ๊ตฌ๊ฐํฉ์ ๊ตฌํ๋ ๊ณต์
S[j] - S[i-1]
์ด๋ฅผ ์ด์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ผ์ ๊ตฌ๊ฐ์์์ ํฉ์ ๋น ๋ฅด๊ฒ (์๊ฐ๋ณต์ก๋๋ฅผ ์ค์ด๋ฉด์) ๊ตฌํ ์ ์๋ค.
S[5] = A[0] + A[1] + A[2] + A[3] + A[4] + A[5]
S[1] = A[0] + A[1]
--------------------------------------------------
∴ S[5] - S[1] = A[2] + A[3] + A[4] + A[5]
๐ง ๋ฐฑ์ค 11659 (๊ตฌ๊ฐ ํฉ ๊ตฌํ๊ธฐ) Silver III
๐คซ solution_11659
n, m = map(int, input().split())
num = list(map(int, input().split()))
prefix_sum = [0]
p_sum = 0
for i in num:
p_sum += i
prefix_sum.append(p_sum)
for _ in range(m):
i, j = map(int, input().split())
print(prefix_sum[j] - prefix_sum[i-1])
๐ง ๋ฐฑ์ค 11660(๊ตฌ๊ฐ ํฉ ๊ตฌํ๊ธฐ _ ์ด์ฐจ์ ๋ฐฐ์ด) Silver I
๐คซ Algorithm
๐คซ solution_11660
n, m = map(int, input().split())
num = [list(map(int, input().split())) for i in range(n)]
S = [[0 for i in range(n + 1)] for i in range(n + 1)]
for i in range(n):
for j in range(n):
S[i + 1][j + 1] = (S[i][j + 1] + S[i + 1][j] - S[i][j]) + num[i][j]
for i in range(m):
x1, y1, x2, y2 = map(int, input().split())
print(S[x2][y2] - (S[x2][y1-1] + S[x1-1][y2]) + S[x1-1][y1-1])
๐ง ๋ฐฑ์ค 10986(๊ตฌ๊ฐ ํฉ ๊ตฌํ๊ธฐ) Gold III
๋ถ๋ถ ํฉ ๊ฐ๋
์ ์ด์ฉํด์ ํ ๋, ๋ถ๋ถ ํฉ์ ๊ณ์ฐํ ๋ฐฐ์ด์ i, j๋ก ์์ฐจ์ ์ผ๋ก ์ ๊ทผํ ๊ฒฝ์ฐ
O(n^2)์ผ๋ก ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ฏ๋ก ๋ค๋ฅธ ํ์ด ๋ฐฉ๋ฒ์ด ํ์ํ๋ค.
๐คซ Algorithm
๋ฏธ๋ฆฌ ๊ตฌํด๋ prefix sum์์์ ๋ถ๋ถํฉ์ S[j] - S[i - 1]์ ๊ณผ์ ์ด๋ค.
์ด๋, S[j]์ S[i-1]์ด ๊ฐ๊ฐ m์ผ๋ก ๋๋ด์ ๋์ ๋๋จธ์ง๊ฐ ๋์ผํ๋ค๋ฉด?
S[j] - S[i - 1] ์ฐ์ฐ ํ ๋๋จธ์ง๋ 0์ด ๋๊ธฐ์ m์ผ๋ก ๋๋ ๋จ์ด์ง๋ค.
๊ฒฐ๊ตญ m์ผ๋ก ๋๋ ๋จ์ด์ง๋ ๋ถ๋ถํฉ์ ๊ตฌํ๋ ๊ฒ์
๋๋จธ์ง๊ฐ ๋์ผํ idx ์ค ์์๋ก nC2๋ฅผ ์ ํํ๋ ๊ฒ๊ณผ ๊ฐ์ผ๋ฏ๋ก ๋ค์ ์๊ณ ๋ฆฌ์ฆ์ ๊ฑฐ์น๋ค.
[1] [2] [3] [1] [2] -> [0] [1] [3] [6] [7] [9] -> [0] [1] [0] [0] [1] [0]
-> [0 : 4, 1 : 2] -> 6 + 1 -> 7
๐คซ solution_10986
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
num_list = list(map(int, input().split()))
rest_list = [0 for _ in range(m)]
rest_list[0] = 1
prefix_sum = 0
for i in range(n):
prefix_sum += num_list[i]
rest = prefix_sum % m
# ๋๋จธ์ง ๊ฐ์ ๋ฐ๋ผ์ idx ์ ๋ณด ์ ์ฅ
rest_list[rest] += 1
cnt = 0
for i in rest_list:
cnt += i*(i - 1) // 2
print(cnt)
self.winter.(12). ํฌ ํฌ์ธํฐ, ์ฌ๋ผ์ด๋ฉ ์๋์ฐ _ ๋ฐฑ์ค [17609, 1253, 11003] (0)
2023.01.15
self.winter.(11). ํ๋ฌธ(palindrome), ๊ธฐํ(์ ๋/์๋ ์ค์ฐจ์ ํ์ฉ), ์๋ผํ ์คํ
๋ค์ค์ ์ฒด _ ๋ฐฑ์ค [1990, 15927, 11664] (2)
2023.01.15
self.winter.(10). ๊ธฐํ, CCW(์ธ์ ) _ ๋ฐฑ์ค [11758, 2166, 17386, 17387] (2)
2023.01.14
self.winter.(09-5). BFS (๋๋น ์ฐ์ ํ์) ๊ฐ๋
_ ๋ฐฑ์ค 1260 (2)
2023.01.14
self.winter.(09-4). DFS (๊น์ด ์ฐ์ ํ์) ๋ฌธ์ _ ๋ฐฑ์ค 2023, ๋ฐฑ์ค 13023 (0)
2023.01.13