Computer Science/Algorithm

[Python 3] BOJ 1253 좋다

무니화니 2024. 3. 2. 15:52

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

 

1253번: 좋다

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

www.acmicpc.net

오늘 풀어볼 문제는 '좋다'라는 문제이다.

 

굉장히 간단하면서도, 막상 구현하려니 쉽지 않은 골드 문제이다.

 

n=int(input())
data=list(map(int,input().split()))
data.sort()
answer=0
for i in range(n):
    num=data[i]
    left=0
    right=n-1
    while left!=right:
        temp=data[left]+data[right]
        if i==left:
            left+=1
            continue
        if i==right:
            right-=1
            continue
        if temp==num:
            answer+=1
            break
        elif temp<=num:
            left+=1
        elif temp>num:
            right-=1

print(answer)

 

우선, 데이터에 모든 숫자들을 저장하고, 순서대로 나열한다.

모든 숫자에 대해서, left node와 right node를 정하여 투 포인터로 설정하였다.