알고리즘 문제풀이

좋다 (백준 1253)

wiojfe 2024. 3. 11. 14:46

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

 

1253번: 좋다

첫째 줄에는 수의 개수 N(1 ≤ N ≤ 2,000), 두 번째 줄에는 i번째 수를 나타내는 Ai가 N개 주어진다. (|Ai| ≤ 1,000,000,000, Ai는 정수)

www.acmicpc.net

매번 배열의 숫자를 보고 나머지의 숫자 2개를 더해 만들 수 있는 지 확인하면 된다. 포인터 2개를 써서 처리하면 더 빠르게 가능하다. 

n =int(input())
arr =list(map(int, input().split()))
arr.sort()
cnt = 0 
def find(arr,target):
    s,e =0,len(arr)-1
    while s<e :
        if arr[s]+arr[e]==target :
            return 1 
        elif arr[s]+arr[e]>target:
            e -=1 
        else :
            s+=1 
    return 0 
for i in range(n):
    tomake= arr[i]
    newarr =arr.copy()
    newarr.remove(tomake)
    cnt += find(newarr,tomake)
    
    
print(cnt)
# -3 -1 0 4 6