728x90
풀이
import sys
input = sys.stdin.readline
N, M = map(int, input().split())
A = list(map(int, input().split()))
i,j,cnt,sum = 0,0,0,A[0]
while j != N:
try:
if sum < M:
j+=1
sum += A[j]
elif sum > M:
sum-=A[i]
i+=1
else:
cnt+=1
sum-=A[i]
i+=1
j+=1
sum+=A[j]
except IndexError:
break
print(cnt)
- 투 포인터는 2개의 포인터로 알고리즘의 시간 복잡도를 최적화한다.
- 위 문제의 시간제한은 0.5초인데, N, M의 범위 값이 각각 N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000)이므로 반복문을 계속 돌려서 문제를 해결할 수 없다. 따라서 투 포인터를 사용한다.
- i, j는 각각 배열을 가리키는 포인터다.
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준 / 큐] 1966 : 프린터 큐 (python) (0) | 2024.03.19 |
---|---|
[백준 / 투 포인터] 1306 : 달려라 홍준 (python) (2) | 2024.03.18 |
[백준 / DP] 1253 : 좋다 (python) (0) | 2024.03.15 |
[백준 / 구간 합 구하기] 11660 : 구간 합 구하기 5 (python) (1) | 2024.03.14 |
[백준 / 리스트] 25966 : 배찬우는 배열을 좋아해 (python) (0) | 2024.03.14 |