문제
정수로 이루어진 크기가 같은 배열 A, B, C, D가 있다.
A[a], B[b], C[c], D[d]의 합이 0인 (a, b, c, d) 쌍의 개수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 배열의 크기 n (1 ≤ n ≤ 4000)이 주어진다. 다음 n개 줄에는 A, B, C, D에 포함되는
정수가 공백으로 구분되어져서 주어진다. 배열에 들어있는 정수의 절댓값은 최대 228이다.
출력
합이 0이 되는 쌍의 개수를 출력한다.
https://www.acmicpc.net/problem/7453
풀이 :
1. O(n^2)이 16,000,000이므로 A+B 모든 경우를 unordered_map에 insert
2. -(C+D)에 대해서 탐색
But, 해시 충돌로 인한 시간 초과
1. A+B 모든 경우를 배열에 담고 정렬 O(n^2logn^2)
2. 이분탐색 (upper_bound, lower_bound) 이용
통과
1. unordered_map을 사용하지 않고 hash function을 생성해 Clear!!
'알고리즘 > 백준 & Leetcode' 카테고리의 다른 글
백준 9935 문자열 폭발 (0) | 2019.04.03 |
---|---|
백준 2015 수들의 합 4 (0) | 2019.04.03 |
백준 10826 피보나치 수 4 (0) | 2019.03.12 |
백준 2517 달리기 (0) | 2019.03.05 |
백준 2143 두 배열의 합 (0) | 2019.02.22 |