๋ฌธ์
ํ์ด ๊ณผ์
ํน์ ๊ตฌ๊ฐ์ ํฉ์ด k
์ด ๋๋ ์ด ๊ฐ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์
๋๋ค.
์๋ ํฌ ํฌ์ธํฐ
๋ฅผ ์ฌ์ฉํด์ ๊ตฌํ๋ ค๊ณ ํ๋๋ฐ ์์๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์ฌ๋ฐ๋ฅธ ๊ฐ์ ๊ตฌํ ์ ์์์ต๋๋ค.
๋ฐ๋ผ์ 1์ฐจ์ ๋ฐฐ์ด์ ๋์ ํฉ์ ๊ณ์ ๊ธฐ๋กํ๋ฉด์ ๊ณ์ฐ์ ์ํํฉ๋๋ค.
์ฌ๊ธฐ์ ํฉ์ด k
๊ฐ ๋๋ ๊ตฌ๊ฐ์ ์ฐพ๊ธฐ ์ํด์๋ ๋ค์๊ณผ ๊ฐ์ด ์๊ฐํด๋ณผ ์ ์์ต๋๋ค.
a, b, ... e, f ...
๋ง์ฝ f
๊น์ง์ ํฉ์ด 30์ด๊ณ ์ฐ๋ฆฌ๊ฐ ์ฐพ๋ k = 20
์ผ ๋ a ~ f
๊น์ง ์ซ์ ์ค์์ ํฉ์ด 10
์ธ ์ง์ ์ ์ฐพ์ผ๋ฉด ๋ฉ๋๋ค.
๊ทธ ์ด์ ๋ a ~ b = 10
์ด๋ผ๋ฉด c ~ f
์ ๊ตฌ๊ฐ์ด 30 - 10 = 20
์ด ๋๊ธฐ ๋๋ฌธ์
๋๋ค. (๊ตฌ๊ฐ ํฉ ์๊ณ ๋ฆฌ์ฆ)
์ฝ๋
/**
* @param {number[]} nums
* @param {number} k
* @return {number}
*/
var subarraySum = function (nums, k) {
let answer = 0,
acc = 0;
const prefix = new Map();
prefix.set(0, 1);
for (const num of nums) {
acc += num;
if (prefix.has(acc - k)) {
answer += prefix.get(acc - k);
}
if (prefix.has(acc)) {
prefix.set(acc, prefix.get(acc) + 1);
} else {
prefix.set(acc, 1);
}
}
return answer;
};
๋ฐ์ํ
'๐ algorithm > leetcode' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
LeetCode 75 - Sort Colors (Medium) (0) | 2021.03.04 |
---|---|
LeetCode 416 - Partition Equal Subset Sum (Medium) (0) | 2021.03.04 |
LeetCode 752 - Open the Lock (Medium) (0) | 2021.03.04 |
LeetCode 11 - Container With Most Water (Medium) (0) | 2021.03.04 |
LeetCode 763 - Partition Labels (Medium) (0) | 2021.03.04 |
๐ฌ ๋๊ธ