(이진 검색, 지도) LEVEL 3 – 1253 – 양호(Python)

https://www.acmicpc.net/problem/1253

1253호: 양호

숫자 N(1 ≤ N ≤ 2,000)의 수는 첫 번째 줄에, N Ai는 두 번째 줄에 i번째 숫자로 표시됩니다. (|Ai| ≤ 1,000,000,000, 여기서 Ai는 정수)

www.acmicpc.net

맵으로 다뤄본 문제인데 계속 10% 틀렸다고 오류가 뜹니다.

우선 풀서치는 한 번은 해야 하는 연산이므로 시간복잡도는 O(N^2)이므로 2초 이내에 풀린다.

아래는 코드입니다.

import sys
input = sys.stdin.readline

n = int(input())
numberList = sorted(list(map(int, input().split())))
numberCountMap = dict()
for element in numberList:
    if element not in numberCountMap:
        numberCountMap(element) = 0
    numberCountMap(element) += 1

goodNumberCount = 0
for i in range(len(numberList)):
    targetNumber = numberList(i)
    numberCountMap(targetNumber) -= 1
    if numberCountMap(targetNumber) == 0:
        del numberCountMap(targetNumber)

    for j in range(len(numberList)):
        a = numberList(j)
        if a not in numberCountMap:
            break

        b = targetNumber - a
        if a == b:
            if numberCountMap(a) >= 2:
                goodNumberCount += 1
                break
        else:
            if b in numberCountMap:
                goodNumberCount += 1
                break

    if targetNumber not in numberCountMap:
        numberCountMap(targetNumber) = 0
    numberCountMap(targetNumber) += 1

print(goodNumberCount)

map 메서드로 확인하는 대신 이진 검색으로 전환해야 합니다.