문제풀이/백준(Boj) 문제풀이
[백준][투포인터] - 2003. 수들의 합 2
얄루몬
2022. 8. 14. 19:40
n,m = map(int,input().split())
a = list(map(int,input().split()))
end = 0
s = 0
cnt = 0
for start in range(len(a)):
while end < n and s < m:
s += a[end]
end += 1
if s == m:
cnt += 1
s -= a[start]
print(cnt)
- start 포인트를 for문을 돌면서 하나씩 접근한다
- while문은 end포인트를 도는 것으로 두 개의 포인터로 해당 리스트를 돌면서 조건을 확인한다.
- 이때 s에서 start부분을 빼주는 이유는 해당 범위를 돌 때 1,2,3을 돈다고 하면 조건을 만족해 2,3,4를 돌아야 한다고 할 때 2,3이 겹치기 때문에 이때 해당 start 부분만 지워주고 다시 end부분만 넣어주면 시간 복잡도가 낮아지기 때문이다.