투 포인터를 활용한 문제
이 문제의 핵심은 본인을 제외했는가 인 것 같다.
예를 들어, 0 3 5 8 11이 주어졌을 때 답은 2(8, 11)이다.
그러나 본인을 제외하는 예외처리를 하지 않는다면, 0 + 3 = 3, 0 + 5 = 5 등 0이 카운팅 되어서 답안에 중복이 생긴다.
그렇기 때문에 if num[i] + num[j] == num[k] 안에서 if i != k and j != k를 통해 한 번 더 거르는 작업이 필요하다.
# 좋다
# N개의 수 중 어떤 수가 다른 수 두 개의 합으로 나타낼 수 있으면 그 수를 '좋다'고 한다.
# N개의 수 중 몇 개가 좋은 수인지 출력하시오. 수가 같아도 위치가 다르면 다른 수이다.
# 첫째 줄에는 수의 개수 N, 둘째 줄에는 N개의 수가 주어진다.
import sys
input = sys.stdin.readline
n = int(input())
num = list(map(int, input().split()))
num.sort()
cnt = 0
for k in range(n):
i = 0
j = n - 1
while i < j:
if num[i] + num[j] == num[k]:
if i != k and j != k:
cnt += 1
break
elif i == k:
i += 1
else:
j -= 1
elif num[i] + num[j] > num[k]:
j -= 1
else:
i += 1
print(cnt)
'Code > Algorithm' 카테고리의 다른 글
[정렬] 버블 정렬 (0) | 2023.09.28 |
---|---|
[자료구조] 스택과 큐 (0) | 2023.09.26 |
[자료구조] 구간 합 (0) | 2023.09.22 |
[자료구조] 배열과 리스트 (0) | 2023.09.21 |
[알고리즘] 논리 오류 탐색 방법, 디버깅 (0) | 2023.09.21 |