투포인터
[풀이]
전형적인 투포인터 문제이나, '중복'되지 않게 처리해주기 위해 처리해주는 것이 약간 까다롭다.
입력배열을 a + b형태로 더한 배열($10^6$개)과 c - d형태로 더한 더한 배열($10^6$개)로 만들어보자. 여기서 투포인터를 돌리면 끝이다.
다만, 유의해야할 점은
1. 두 수를 더해서 배열을 만들 때 두 수는 서로 달라야한다.
2. 음수도 입력으로 들어올 수 있기 때문에 $n^2$개를 모두 만들어 주어야한다. 2중 for문을 $i$ from $0$ to $n$, $j$ from $i + 1$ to $n$으로 돌리면 음수의 경우에 답이 나오지 않는다.
3. 배열을 만들 때 값만 저장하는 것이 아닌, index도 같이 저장해둬야 중복을 처리할 수 있다.
4. 중복처리는 투포인터의 각 포인터가 움직이고 나서 index의 중복이 생기면 옮겼던 포인터를 한칸 더 옮기는 방식으로 중복을 처리한다.
사실 중복제거하면서 투포인터를 쓰는 문제는 많이 있지만, 직접 구현해보면 다른 문제보다 약간 더 까다로운데, a + b + c = d인 d의 존재유무를 찾는게 아닌 그 중 가장 큰 d를 찾는 문제라 약간 까다롭다.