본문 바로가기
코딩테스트 파이썬/백준

합이 0인 네 정수 ( 7453 번 )

by 세용용용용 2025. 9. 11.

7453번: 합이 0인 네 정수

 


🧠 알고리즘

  • 해시맵(Hash Map, Counter)을 이용한 투포인터 방식의 변형 (Meet in the Middle 기법)

 

✔️ 동작 방식

  • 배열 A, B에서 가능한 모든 합 a+ba+b를 구해 Counter에 저장한다. (중복 합은 빈도수로 누적)
  • 배열 C, D에서 가능한 모든 합 c+dc+d를 구하면서, −(c+d)-(c+d)가 A+B 합에 몇 번 등장했는지 확인한다.
  • 등장 횟수만큼 결과값에 더해, 최종적으로 합이 0이 되는 쌍의 개수를 구한다.

 

🧾 코드

import sys
from collections import Counter

def _main(n):
    answer = 0
    
    a, b, c, d = [], [], [], []
    for _ in range(n):
        x1, x2, x3, x4 = map(int, sys.stdin.readline().rstrip().split())
        a.append(x1)
        b.append(x2)
        c.append(x3)
        d.append(x4)

    ab = Counter()
    for i in a:
        for j in b:
            ab[i + j] += 1

    for i in c:
        for j in d:
            answer += ab[-(i + j)]    
    
    return answer
    
n = int(sys.stdin.readline().rstrip())
print(_main(n))

 

⏱️ 시간 복잡도

for i in a : a 와 b 를 순회하며 가능한 합 해시맵에 기록 ( 이차형 시간 복잡도 )
    for j in b :

for i in c : c 와 d 를 순회하며 0 이되는 경우의 수 찾기 ( 이차형 시간 복잡도 )
    for j in d :
    
해당 알고리즘 시간 복잡도 : 이차형 시간 복잡도 ( O(n ** 2) )

 

'코딩테스트 파이썬 > 백준' 카테고리의 다른 글

머리 톡톡 ( 1241 번 )  (0) 2025.09.13
Dance Dance Revolution ( 2342 번 )  (0) 2025.09.12
보석 도둑 ( 1202 번 )  (0) 2025.09.08
노드사이의 거리 ( 1240 번 )  (0) 2025.09.08
피리 부는 사나이 ( 16724 번 )  (0) 2025.09.07