n = int(input())
a = list(map(int,input().split()))
x = int(input())
cnt = 0
left, right = 0, n-1
a.sort()
while left < right:
if a[left] + a[right] < x:
left += 1
elif a[left] + a[right] > x:
right -= 1
else:
cnt += 1
left += 1
right -= 1
print(cnt)
- 정렬해서 맨 앞 수와 맨 뒤의 수를 더해본 뒤 x보다 작을 때는 앞 수를 한 칸 뒤로 옮겨(더 큰수로 갈 수 있게)준다.
- x보다 두 수를 더한 값이 더 클때는 right를 가르키고 있는 포인터를 앞쪽으로 옮겨(더 작은 수로 갈 수 있게)준다.
- 두 수의 합이 해당 x와 같은 값이라면 cnt를 1 증가시켜준다.
- 해당 문제는 두 수만 더하는 문제이기 때문에 정렬을 해서 풀어주어야 한다.
'문제풀이 > 백준(Boj) 문제풀이' 카테고리의 다른 글
[백준][큐] - 1158. 요세푸스 문제 (0) | 2022.09.06 |
---|---|
[백준][투포인터] - 20922. 겹치는 건 싫어 (0) | 2022.08.15 |
[백준][투포인터] - 2003. 수들의 합 2 (0) | 2022.08.14 |
[백준][BFS] - 14502. 연구소 (0) | 2022.08.04 |
[백준][구현] - 2475. 검증수 (0) | 2022.08.04 |