문제
투포인터 알고리즘을 활용해 리스트에 두 개의 위치를 기록하여 문제를 해결했습니다.
1. 수의 리스트를 오름차순으로 정렬합니다.
2. 리스트의 시작점과 끝점을 투포인터로 지정합니다.
3. 포인터로 지정된 값들의 합이 일치하면 카운트를 증가하고, 포인터를 이동합니다.
4. 합이 타겟값보다 크다면 끝점을 이동하고, 반대의 경우는 시작점을 이동합니다.
N = int(input())
lst = list(map(int, input().split()))
X = int(input())
# 오름차순 정렬
lst.sort()
cnt = 0
# 왼쪽, 오른쪽 포인터
left, right = 0, N-1
while left < right:
# 타겟값을 만족한다면 두 포인터를 이동 및 카운트 증가
if lst[left] + lst[right] == X:
cnt += 1
right -= 1
left += 1
# 타겟값보다 작다면 왼쪽 포인터를 이동
elif lst[left] + lst[right] < X:
left += 1
# 타겟값보다 크다면 오른쪽 포인터를 이동
else:
right -= 1
print(cnt)
피드백 및 개선점은 댓글을 통해 알려주세요😊