문제풀이/백준(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부분만 넣어주면 시간 복잡도가 낮아지기 때문이다.