728x90
반응형
투 포인터
리스트에 순차적으로 접근해야할 때 두개의 포인터를 이용하여 합을 구하는 기법
O(N)으로 해결가능
1) a+b = k
시작점은 첫번째, 끝점은 마지막 원소를 가리킨 상태에서 시작.
이 경우는 정렬된 상태에서 진행이 필요하다.
start, end, result = 1, n-1, 0
while start < end:
total = arr[start] + arr[end]
if total > x:
end-=1
elif total < x:
start+=1
else:
start+=1
result+=1
2) start~end = k
시작점과 끝점이 첫번째 원소를 가리킨 상태에서 시작.
start, end, summary, result = 0, 0, 0, 0
for start in range(n):
while summary < m and end < n:
summary += data[end]
end +=1
if summary==m:
result +=1
summary -=data[start]
두 개의 포인터를 사용하여
import sys
n = int(sys.stdin.readline())
arr = list(map(int,sys.stdin.readline().split()))
x = int(sys.stdin.readline())
start, end = 1,n-1
cnt = 0
while start < end:
total = arr[start] + arr[end]
if total < x:
end-=1
elif total > x:
start+=1
else:
start+=1
cnt+=1
print(cnt)
반응형
'Python > 알고리즘' 카테고리의 다른 글
파이썬(python) 알고리즘 - 최단 경로 (플로이드 워셜) (0) | 2021.09.05 |
---|---|
파이썬(python) 가장 긴 증가하는 부분수열 (LIS) (2) | 2021.08.27 |
파이썬(python) 알고리즘 - 최단 경로 (다익스트라) (0) | 2021.05.09 |
파이썬(python) 알고리즘 - 동적 계획법 푸는 방법 (0) | 2021.04.28 |
파이썬(python) 알고리즘 - DFS, BFS (0) | 2021.04.22 |