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)
'코딩테스트 > BOJ' 카테고리의 다른 글
| [백준][그리디] 1541.잃어버린 괄호 (0) | 2023.12.28 |
|---|---|
| [백준][DP] 4883. 삼각 그래프 (0) | 2023.12.10 |
| [백준][투포인터] 20442. ㅋㅋ루ㅋㅋ (1) | 2023.12.10 |
| [백준][구현] 2170. 선긋기 (1) | 2023.12.10 |
| [백준][BFS/플로이드워셜] 2660. 회장뽑기 (0) | 2023.12.09 |