๐ก ์กฐ๊ฑด ๋ฐ ํ์ด
(-1,000,000,000 โค T โค 1,000,000,000)
(1 โค n โค 1,000)
(1 โค m โค 1,000)
- ๋์ ํฉ ์ ํ์ ๋ฌธ์
- ๋ ๋ฐฐ์ด์ ๋ถ๋ถ๋ฐฐ์ด์ ์ฌ์ฉํ์ฌ ํฉ์ ๊ตฌํด
T
๋ฅผ ๋ง๋ค ์ ์๋ ๊ฐ์๋ฅผ ๊ตฌํ๋ค.
๐ฅ ์์ค ์ฝ๋
from sys import stdin, setrecursionlimit
setrecursionlimit(int(1e9))
t = int(stdin.readline())
n = int(stdin.readline())
A = list(map(int, stdin.readline().split()))
m = int(stdin.readline())
B = list(map(int, stdin.readline().split()))
Asum = {}
for i in range(n):
for j in range(i, n):
k = sum(A[i:j + 1])
if k in Asum:
Asum[k] += 1
else:
Asum[k] = 1
Bsum = {}
for i in range(m):
for j in range(i, m):
k = sum(B[i:j + 1])
if k in Bsum:
Bsum[k] += 1
else:
Bsum[k] = 1
res = 0
for key in Asum.keys():
if (t - key) in Bsum:
res += Bsum[t - key] * Asum[key]
print(res)
๐ ์์ ๋ฐ ์คํ๊ฒฐ๊ณผ
์์
5
4
1 3 1 2
3
1 3 2
์คํ๊ฒฐ๊ณผ
7
โจ๏ธ ๋ฌธ์ ํ์ด
- A ๋ถ๋ถ ๋ฐฐ์ด์ ํฉ๋ค๊ณผ B ๋ถ๋ถ ๋ฐฐ์ด์ ํฉ๋ค์ ๋ํด T๊ฐ ๋ง๋ค์ด์ง๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์๋ค.
- ๋ ๋ฐฐ์ด์ ๊ฐ ๊ตฌ๊ฐ์ ํด๋นํ๋ ๋์ ํฉ์ ๊ฐ๊ฐ์ dict ์๋ฃ๊ตฌ์กฐ์ ๋ฃ๊ณ , ์ค๋ณต๋์ด ๋์ค๋ ๊ฒฝ์ฐ +1 ์ ํด์ค๋ค.
- A ๋ฐฐ์ด์ ํค ๊ฐ์ ์์ฐจ์ ์ผ๋ก ์ํํ๋ฉด์
๊ตฌํ๊ณ ์ ํ๋ t ๊ฐ์์ A ๋ฐฐ์ด์ ํค ๊ฐ์ ๋นผ์ค ๊ฐ์ด B๋ฐฐ์ด์ ํค๊ฐ์ผ๋ก ์๋ค๋ฉด,
res์ ํด๋น B๋ฐฐ์ด์ ๊ฐ๊ณผ A๋ฐฐ์ด์ ๊ฐ์ ๊ณฑํ์ฌ ๋ํด์ค๋ค.for key in Asum.keys():
if (t - key) in Bsum:
res += Bsum[t - key] * Asum[key]
๐พ ๋๋์
- ์ฒ์์ ์์ด๋์ด๊ฐ ๋ ์ค๋ฅด์ง์์ ํ๋ค์ดํ๋ค.
- ์ํ, DP๊ฐ ์ ์ผ ์ฝํ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ค์๋ค.
- Dict ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ข์ํ๋๋ฐ ์ด๋ ๊ฒ ์ฌ์ฉ์ ํด๋ด์ ๋ ์ข์๋ค.