💡문제접근
- 투 포인터를 이용한 방법도 아니었고 이걸 어떻게 풀어야 하는지 정말 오랫동안 고민했는데 쉽사리 해결방법이 떠오르지 않았다. 질문게시판에 있는 힌트를 참고했다.
- 각 누적합에 대한 개수를 저장하고 현재 수가 M일 때, -M의 개수를 세면 된다는 방법을 알려준 글을 보고 딕셔너리를 이용해야겠다고 생각했다.
💡코드(메모리 : 45708KB, 시간 : 152ms)
import sys
input = sys.stdin.readline
N, M = map(int, input().strip().split())
nums = list(map(int, input().strip().split()))
prefix_sum = {0 : 1}
tot = 0
ans = 0
for i in nums:
tot += i
if tot - M in prefix_sum.keys():
ans += prefix_sum[tot - M]
if tot in prefix_sum:
prefix_sum[tot] += 1
else:
prefix_sum[tot] = 1
print(ans)
💡소요시간 : 2d