- 풀었다고 생각했는데 여러 코너 케이스에 의해서 계속 WA를 받았다.
- 코너 케이스에 대해서 분석해봤더니 내가 어디 부분에서 틀렸는지 알 수 있었다.
- 수의 위치가 다르면 값이 같아도 다른 수이다.
입력
2
0 1
출력
0
①. 배열에 들어있는 수 중에서 0을 만들 수 있는 방법 → 없다.
②. 배열에 들어있는 수 0과 1을 이용해서 1을 만들 수 있는 방법은 없다.
따라서 위 코너 케이스의 출력은 0이 나와야 맞는 것이다. 하지만 내 코드는 위의 부분을 잡지 못해서 계속 다른 값이 출력되었다. 이 부분은 배열의 슬라이싱을 통해서 해결할 수 있었다.
import sys
input = sys.stdin.readline
N = int(input().strip())
A = list(map(int, input().strip().split()))
# 이분탐색을 수행하기 위해서는 배열이 오름차순으로 정렬된 상태여야함
A.sort()
ans = 0
def binary_search(target, data):
global ans
start = 0
end = len(data) - 1
while True:
if start >= end:
break
res = data[start] + data[end]
if res == target:
ans += 1
break
elif res > target:
end -= 1
else:
start += 1
for i in range(N):
binary_search(A[i], A[:i] + A[i + 1:])
print(ans)