📚알고리즘/백준
[백준 1253번] 좋다 (Python/파이썬)
루오
2023. 1. 9. 15:51
https://www.acmicpc.net/problem/1253
1253번: 좋다
첫째 줄에는 수의 개수 N(1 ≤ N ≤ 2,000), 두 번째 줄에는 i번째 수를 나타내는 Ai가 N개 주어진다. (|Ai| ≤ 1,000,000,000, Ai는 정수)
www.acmicpc.net
투 포인터를 사용하는 문제로 백준 1940번과 상당히 유사한 문제이다.
글쓴이 같은 경우는 투 포인터를 사용하기 위해 수들을 정렬해주고 더해서 나와야하는 수를 pop하여 저장했다가 반복이 끝나면 insert로 다시 추가하는 방식을 사용했다.
투 포인터에 대한것은 1940번에서 했기 때문에 생략한다.
코드는 다음과 같다.
import sys
input = sys.stdin.readline
N = int(input())
num = list(map(int, input().split()))
num.sort()
count = 0
for i in range(len(num)):
target = num.pop(i)
a = 0
b = N-2
while a < b:
first = num[a]
second = num[b]
if first + second == target:
count += 1
num.insert(i,target)
break
elif first + second > target:
b -= 1
elif first + second < target:
a += 1
if len(num) != N:
num.insert(i,target)
else:
pass
print(count)
1940번과 같이 생각해보면 투 포인터를 이해하기 정말 좋은 문제라고 생각한다.