Leetcode Java Subarray Sum Equals K
업데이트:
문제
코드
class Solution {
public int subarraySum(int[] nums, int k) {
Map<Integer, Integer> map = new HashMap<>();
int sum = 0;
int count = 0;
map.put(0, 1);
for (int num : nums) {
sum += num;
if (map.containsKey(sum - k)) {
count += map.get(sum - k);
}
map.put(sum, map.getOrDefault(sum, 0) + 1);
}
return count;
}
}
결과
설명
-
nums의 연속된 요소의 합이 k인 부분 배열의 개수를 구하는 문제이다.
- 문제 풀이에 필요한 변수를 정의한다.
- map은 부분 합을 이용한 개수를 저장할 변수로, HashMap으로 초기화하고 키가 0인 값을 1로 초기화한다.
- sum은 부분 합을 저장할 변수로, 0으로 초기화한다.
- count는 k가 되는 부분 배열의 개수를 저장할 변수로, 0으로 초기화한다.
- nums의 모든 요소를 num에 넣어 반복한다.
- sum에 num을 더해 합계를 계산한다.
- map에 $sum - k$이 키인 값이 존재하면, count에 map에서 $sum - k$인 값을 더해 부분 배열의 합이 k인 개수를 증가시킨다.
- map에 키가 sum인 값을 1 증가시키고 반복을 계속 수행한다.
- 반복이 완료되면 부분 배열의 개수를 저장한 count를 주어진 문제의 결과로 반환한다.
해설
- nums의 [0, $i - 1$] 구간의 합과 [0, j] 구간의 합을 알면 [i, j] 구간의 합을 알 수 있다.
- 그러므로 map에 sum에 해당하는 값을 증가시키고, 다음 차례에서 $sum - k$의 값이 존재하면 count에 누적시키면 연속된 요소를 이용한 부분 배열의 합이 k인 개수를 구할 수 있다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기