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 메서드로 확인하는 대신 이진 검색으로 전환해야 합니다.