코딩테스트/BOJ

[백준][누적합] 2015. 수들의 합 4

박소민 2023. 12. 10. 05:04
2015. 수들의 합 4
 

2015번: 수들의 합 4

첫째 줄에 정수 N과 K가 주어진다. (1 ≤ N ≤ 200,000, |K| ≤ 2,000,000,000) N과 K 사이에는 빈칸이 하나 있다. 둘째 줄에는 배열 A를 이루는 N개의 정수가 빈 칸을 사이에 두고 A[1], A[2], ..., A[N]의 순서로

www.acmicpc.net

 

 

  • 다른 사람 풀이
    • 누적합 값들을 완탐하면서 현재 누적값 -k 값이 cnt의 딕셔너리 키값으로 존재하면 -> 그 값만큼 더해준다
    • prefix[i]가 같은 값이 나오면 cnt[prefix[i]] 기존 값에 +1 해서 저장해둔다
- 딕셔너리의 get
cnt.get(prefix[i] - k, 0)
: prefix[i] - K가 cnt 딕셔너리에 있으면 해당 키에 대한 value값 반환, 없다면 0 반환

 

 

n, k = map(int, input().split())
nums = list(map(int, input().split()))
prefix = [0]

for i in range(n):
    prefix.append(prefix[-1]+nums[i])

cnt = {}
ans = 0
for i in range(n + 1):
    # prefix[i] - K가 cnt 딕셔너리에 있으면 해당 키에 대한  value값 반환, 없다면 0 반환
    ans += cnt.get(prefix[i] - k, 0)

    cnt[prefix[i]] = cnt.get(prefix[i], 0) + 1

print(ans)