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부분만 넣어주면 시간 복잡도가 낮아지기 때문이다.
'문제풀이 > 백준(Boj) 문제풀이' 카테고리의 다른 글
[백준][투포인터] - 20922. 겹치는 건 싫어 (0) | 2022.08.15 |
---|---|
[백준][투포인터] - 3273. 두 수의 합 (0) | 2022.08.14 |
[백준][BFS] - 14502. 연구소 (0) | 2022.08.04 |
[백준][구현] - 2475. 검증수 (0) | 2022.08.04 |
[백준][구현] - 2743. 단어 길이 재기 (0) | 2022.08.04 |