정수로 이루어진 크기가 같은 배열 A, B, C, D가 있다.
A[a], B[b], C[c], D[d]의 합이 0인 (a, b, c, d) 쌍의 개수를 구하는 프로그램을 작성하시오.
처음 볼 때는 어케하지? 했어서 알고리즘 분류를 봤는데 중간에서 만나기 알고리즘이 있어서 반으로 나눠하면 되겠구나 했다.. 풀 때는 어렵다고 생각했는데 풀고나니 쉬웠던..
n = int(input())
result = 0
A, B, C, D = [], [], [], []
for _ in range(n):
a, b, c, d = map(int, input().split())
A.append(a)
B.append(b)
C.append(c)
D.append(d)
ab = dict()
for a in A:
for b in B:
v = a + b # 모든 경우의 수를 딕셔너리에 저장
if v not in ab.keys():
ab[v] = 1
else:
ab[v] += 1
for c in C:
for d in D:
v = -1 * (c + d)
if v in ab.keys(): # -ab인 경우, 그 값을 result에 추가
result += ab[v]
print(result)