💡문제접근

  • 풀었다고 생각했는데 여러 코너 케이스에 의해서 계속 WA를 받았다.
  • 코너 케이스에 대해서 분석해봤더니 내가 어디 부분에서 틀렸는지 알 수 있었다.
  • 수의 위치가 다르면 값이 같아도 다른 수이다.

💡코너 케이스

입력

2
0 1

출력

0

①. 배열에 들어있는 수 중에서 0을 만들 수 있는 방법 → 없다.

  • 우선 0을 뺀다.
  • 그렇게 되면 배열에 남아있는 수는 1 하나만 남게 되므로 절대로 0을 만들지 못한다.

②. 배열에 들어있는 수 0과 1을 이용해서 1을 만들 수 있는 방법은 없다.

  • 우선 1을 뺀다.
  • 그렇게 되면 배열에 남아있는 수는 0 하나만 남게 되므로 절대로 1을 만들지 못한다.

따라서 위 코너 케이스의 출력은 0이 나와야 맞는 것이다. 하지만 내 코드는 위의 부분을 잡지 못해서 계속 다른 값이 출력되었다. 이 부분은 배열의 슬라이싱을 통해서 해결할 수 있었다.

💡코드(메모리 : 31256KB, 시간 : 400ms)

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)

💡소요시간 : 21m

0개의 댓글