1. 문제분석 및 접근법
- 수의 위치가 다르면 값이 같아도 다른 수이기 때문에 중복 가능
- 투 포인터 를 사용하되, 자기 자신은 제외해야 함.
- 시간 복잡도는 O(n^2)까지 가능
- n을 입력 받음
- 리스트에 n개의 수를 저장
- 정렬
- 투 포인터를 처음과 마지막에 배치
- 투 포인터 이동 원칙에 맞춰 이동
- start, end가 같아지면 안됨
- start + end = 리스트[i]면 인정
2. 슈도코드
실패
n 입력 받음
nums 리스트로 입력 받음
nums 정렬
cnt 변수 생성
good(좋은 수) 변수 초기값 설정
for i -> 0~n만큼 반복:
find = nums[i]
start = 0
end = n-1(인덱스 번호니까)
while start가 end보다 작으면:
good = nums[start] + nums[end]
if good이 find보다 크면:
end -= 1
elif good이 find보다 작으면:
start += 1
else:(good이랑 find랑 같으면)
cnt += 1
멈춤
print(cnt)
3. 코드 구현
import sys
input = sys.stdin.readline
n = int(input())
nums = list(map(int, input().split()))
nums.sort()
cnt = 0
good = 0
for i in range(n):
find = nums[i]
start = 0
end = n-1
while start != end:
good = nums[start] + nums[end]
if good > find:
end -= 1
elif good < find:
start += 1
else:
if start != i and end != i:
cnt += 1
break
elif start == i:
start += 1
elif end == i:
end -= 1
print(cnt)