- 리스트에서 자신을 제외한 두 수의 합이 x가 되는 경우의 수를 출력하는 문제이다.
- 2중 for문(O(n^2))으로 풀면 시간초과가 나오기에 투 포인터 알고리즘(O(n))을 통해 풀었다.
import sys
input = sys.stdin.readline # 입력 시간을 줄이기 위한 코드
N = int(input())
arr = list(sorted(map(int,input().split()))) # 왼쪽과 오른쪽에서 가운데로 오는 투포인터 알고리즘을 쓸 것이기에 정렬을 하고 시작하였다.
target = int(input())
cnt = 0
start, end = 0, N-1
while end > start: # start와 end가 같아진다면 끝나도록 제한
tmp = arr[start] + arr[end] # tmp에 두 수의 합을 저장
if tmp > target: # tmp가 target보다 크다면 end의 인덱스를 -1
end -= 1
else:
start += 1 # tmp가 target보다 작다면 start의 인덱스를 -1
if tmp == target: # tmp가 target과 같다면 cnt를 올림
cnt += 1
print(cnt)
'Python > 백준' 카테고리의 다른 글
[백준/Python] 1806. 부분합 (0) | 2022.12.13 |
---|---|
[백준/Python] 2470. 두 용액 (0) | 2022.12.12 |
[백준/Python] 1976. 여행 가자 (0) | 2022.12.10 |
[백준/Python] 1717. 집합의 표현 (0) | 2022.12.10 |
[백준/Python] 20040. 사이클 게임 (0) | 2022.12.08 |