(풀이)
시간 제한이 0.5초이기 때문에 평소처럼 반복문에서 일일이 비교하면 시간 제한으로 틀릴 수 있다. 투포인터 알고리즘을 이용해서 풀었는데 만약 끝(end)이 n과 같아져서 풀이를 끝내면 end는 그대로 있고 start가 증가 할 경우를 빠뜨릴 수 있기 때문에 start, end, n 이 세가지가 같아질 경우 반복문이 끝내게 만들었다.
또한 반복문 안에서 합이 m보다 작다면, end를 하나 증가하고 그렇지 않을 경우 현재 합에서 start 위치의 값을 뺀 후, start를 하나 증가시켜 해당하는 값을 더함으로써 m과 비교를 했다.
투포인터 문제를 처음 풀어봤는데 작성하고 나니 간단하다고 생각했는데 그 과정이 쉽지 않았다.. 더 공부하고 노력해야겠다!!!
import sys
input = sys.stdin.readline
n,m = map(int,input().split())
arr = list(map(int,input().split()))
start = 0
end = 1
count =0
sum = 0
sum += arr[start]
if sum == m:
count += 1
while True:
if start == end == n:
break
if sum < m and end < n:
sum+= arr[end]
end += 1
else:
sum -= arr[start]
start += 1
if sum == m:
count += 1
print(count)
'Algorithm > 백준' 카테고리의 다른 글
백준 2231번(Python) : 분해합 (0) | 2021.03.05 |
---|---|
백준 7795번(Python) : 먹을 것인가 먹힐 것인가 (0) | 2021.03.03 |
백준 2309번(Python) : 일곱 난쟁이 (0) | 2021.03.03 |
백준 2798번(Python) : 블랙잭 (0) | 2021.03.03 |
백준 1065번(Python) : 한수 (0) | 2021.03.01 |