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
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기