Problem
๋ฌธ์
A[1], A[2], ..., A[N]์ N๊ฐ์ ์ ์๊ฐ ์ ์ฅ๋์ด ์๋ ๋ฐฐ์ด์ด ์๋ค. ์ด ๋ฐฐ์ด A์ ๋ถ๋ถํฉ์ด๋ 1 โค i โค j โค N์ธ ์ ์ i์ j์ ๋ํด A[i]๋ถํฐ A[j]๊น์ง์ ํฉ์ ๋งํ๋ค.
N๊ณผ A[1], A[2], ..., A[N]์ด ์ฃผ์ด์ก์ ๋, ์ด๋ฌํ Nร(N+1)/2๊ฐ์ ๋ถ๋ถํฉ ์ค ํฉ์ด K์ธ ๊ฒ์ด ๋ช ๊ฐ๋ ์๋์ง๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ ์ N๊ณผ K๊ฐ ์ฃผ์ด์ง๋ค. (1 โค N โค 200,000, |K| โค 2,000,000,000) N๊ณผ K ์ฌ์ด์๋ ๋น์นธ์ด ํ๋ ์๋ค. ๋์งธ ์ค์๋ ๋ฐฐ์ด A๋ฅผ ์ด๋ฃจ๋ N๊ฐ์ ์ ์๊ฐ ๋น ์นธ์ ์ฌ์ด์ ๋๊ณ A[1], A[2], ..., A[N]์ ์์๋ก ์ฃผ์ด์ง๋ค. ์ฃผ์ด์ง๋ ์ ์์ ์ ๋๊ฐ์ 10,000์ ๋์ง ์๋๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ํฉ์ด K์ธ ๋ถ๋ถํฉ์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ 1
4 0
2 -2 2 -2
Plain Text
๋ณต์ฌ
์์ ์ถ๋ ฅ 1
4
Plain Text
๋ณต์ฌ
์์ ์ ๋ ฅ 2
6 5
1 2 3 4 5 0
Plain Text
๋ณต์ฌ
์์ ์ถ๋ ฅ 2
3
Plain Text
๋ณต์ฌ
Code
ย #1. ์๊ฐ์ด๊ณผ ์ฝ๋
Idea
1.
๋์ ํฉ ๋ฐฐ์ด ์ฑ์ฐ๊ธฐ
2.
์ด์ค for๋ฌธ์ผ๋ก ์ํํ๋ฉด์ ๊ตฌ๊ฐํฉ ๊ตฌํ๊ธฐ
ย Code
# ์๊ฐ์ด๊ณผ ์ฝ๋
import sys
read = sys.stdin.readline
n, k = map(int, read().split())
nums = list(map(int, read().split()))
psum = [0] * (n + 1)
cnt = 0
for i in range(n):
psum[i + 1] = psum[i] + nums[i]
for i in range(n):
for j in range(i, n):
if psum[j + 1] - psum[i] == k:
cnt += 1
print(cnt)
Python
๋ณต์ฌ
Commentary
N ์ด 200,000 ์ด๋ฏ๋ก O(N^2) ๋ก์ง์ ์๊ฐ์ด๊ณผ๊ฐ ๋๋ค
#2. ์ ๋ต์ฝ๋
Idea
๊ตฌ๊ฐํฉ์ ๊ตฌํ๋ ๊ณต์์ ๊ทธ๋๋ก ์ฌ์ฉํ์ง ์๊ณ ์ดํญ์ ํตํด์ ์ฐ๋ณ์ ๊ณผ๊ฑฐ ๋์ ํฉ๋ง์ ๋๋ค
(์๋ ์ํ๊ธฐ ์ฐธ๊ณ )
ย Code
import sys
read = sys.stdin.readline
n, k = map(int, read().split())
nums = list(map(int, read().split()))
psums = [0] * (n + 1)
psum_cnt = {}
ans = 0
# ๋์ ํฉ ์์ฑ
for i in range(n):
psums[i + 1] = psums[i] + nums[i]
# k = psum[j+1] - psum[i]
# ๋์ ํฉ ๋ฐฐ์ด์ ์ํํ๋ฉด์ psum - k ๊ฐ psum_cnt ์ ์๋์ง ๊ฒ์ฌํ๊ณ
# ์์ผ๋ฉด (psum-k) ์ ๊ฐ์๋งํผ ๋ํด์ค๋ค
# ๊ทธ ํ psum_cnt ์ psum ๊ฐ์ 1 ์ฆ๊ฐ์ํจ๋ค (๊ฐ์ 1 ์ฆ๊ฐ)
for psum in psums:
if psum - k in psum_cnt:
ans += psum_cnt[psum - k]
psum_cnt[psum] = psum_cnt.get(psum, 0) + 1
print(ans)
Python
๋ณต์ฌ
Solution
Commentary
โข
๊ตฌ๊ฐํฉ์ 2์ค for๋ฌธ์ด ์๋ for ๋ฌธ ํ๋๋ก ๊ตฌํ๊ธฐ ์ํ ์์ด๋์ด๋ฅผ ์๊ฐํ๋๊ฒ ํต์ฌ์ด์์
โฆ
ํ์ฌ๋์ ํฉ(psum) - k ๊ฐ ๊ณผ๊ฑฐ๋์ ํฉ ๋์
๋๋ฆฌ(prefix_cnt) ์ ์๋์ง ํ์ธํ๋ ์์ด๋์ด
โข
n,k ๊ฐ ๋งค์ฐ ํฌ๊ธฐ ๋๋ฌธ์ ๋จ์๋ฆฌ์คํธ๊ฐ ์๋๋ผ ๋์
๋๋ฆฌ๋ฅผ ์ฌ์ฉํด์ ๊ฐ ์กฐํ ์๊ฐ์ O(1) ๋ก ๋จ์ถ
โข
์์ด๋์ด ๋ฐ์์ด ๋งค์ฐ๋งค์ฐ ์ด๋ ค์ ๊ณ ํ์ด๋ฅผ ์ฒ์์ ๋ณด๊ณ ๋ ์ดํดํ๊ธฐ๊น์ง๋ ์ค๋๊ฑธ๋ ธ๋ค