CS/Coding Test
[백준] 1253: 좋다 python 구현 / 투 포인터
hyez
2023. 5. 1. 10:35
문제
N개의 수 중에서 어떤 수가 다른 수 두 개의 합으로 나타낼 수 있다면 그 수를 “좋다(GOOD)”고 한다.
N개의 수가 주어지면 그 중에서 좋은 수의 개수는 몇 개인지 출력하라.
수의 위치가 다르면 값이 같아도 다른 수이다.
풀이
- 리스트를 정렬한다.
- 0 ~ N-1까지 반복문을 돌면서 i번째 원소를 선택하고 이를 제외한 리스트(temp)를 생성한다.
- 이후 temp에서 두 포인터를 정하여 원소의 합(total)이 i번째 원소에 해당하는지 비교한다.
- total < list[i] : start 증가
- total > list[i] : end 감소
- total == list[i] : answer 증가 후 break
- 2, 3 과정을 반복한다
CODE
import sys
n = int(input())
num_list = list(map(int, sys.stdin.readline().split()))
num_list.sort()
answer = 0
for i in range(n):
temp = num_list[:i] + num_list[i+1:]
start, end = 0, len(temp)-1
while start < end :
total = temp[start] + temp[end]
if total == num_list[i]:
answer += 1
break
elif total < num_list[i]:
start += 1
else:
end -= 1
print(answer)