2143번: 두 배열의 합
첫째 줄에 T(-1,000,000,000 ≤ T ≤ 1,000,000,000)가 주어진다. 다음 줄에는 n(1 ≤ n ≤ 1,000)이 주어지고, 그 다음 줄에 n개의 정수로 A[1], …, A[n]이 주어진다. 다음 줄에는 m(1≤m≤1,000)이 주어지고, 그 다
www.acmicpc.net
S[j] - S[i-1] 을 통해 i부터 j까지의 합을 구할 수 있다. A의 합을 dictionary에 넣고 B와 T가 되는 A의 합을 찾자!
sumA에 A배열의 합, sumB에 B배열의 합을 저장한다.
Adict에 A의 부분합을 저장한다. key=부분합 value=개수
B의 부분합을 구하면서 그 부분합과 T를 만들 수 있는 A의 합을 Adict에서 찾는다.
import sys
from collections import defaultdict
input = sys.stdin.readline
T = int(input())
N = int(input())
A = list(map(int, input().split()))
M = int(input())
B = list(map(int, input().split()))
Adict = defaultdict(int)
sumA = [0]
sumB = [0]
for a in A:
sumA.append(sumA[-1]+a)
for b in B:
sumB.append(sumB[-1]+b)
for i in range(1, len(A)+1):
for j in range(i):
Adict[sumA[i]-sumA[j]] += 1
result = 0
for i in range(1, len(B)+1):
for j in range(i):
result += Adict.get(T-(sumB[i]-sumB[j]), 0)
print(result)
'개발 > 알고리즘' 카테고리의 다른 글
[백준 14889] 스타트와 링크 (python) (0) | 2021.04.26 |
---|---|
[백준 2096] 내려가기 (python) (0) | 2021.04.26 |
[백준 1806] 부분합 (python) (0) | 2021.04.23 |
[백준 1072] 게임 (python) (0) | 2021.04.23 |
[백준 3055] 탈출 (python) (0) | 2021.04.22 |
최근댓글