๋ฌธ์
ํ์ด ๊ณผ์
์์ ์ ์๋ค๋ก ์ด๋ฃจ์ด์ง ๋ฐฐ์ด์ด ์ฃผ์ด์ง ๋ +
์ -
๋ฅผ ์ ์ ํ ์ฌ์ฉํด์ ํน์ ํฉ S
๋ฅผ ๋ง๋ค ์ ์๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ฐพ๋ ๋ฌธ์ ์
๋๋ค.
๋ฐฐ์ด์ ๊ธธ์ด๊ฐ ์ต๋ 20 ์ด๊ณ + ์ -
๋ ๊ฐ์ง๋ง ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์ต๋ 2^20
์ ๊ฒฝ์ฐ์ ์๋ง ํ์ํ๋ฉด ๋ฉ๋๋ค.
๋ฐ๋ผ์ DFS
๋ฅผ ์ด์ฉํด์ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ฐ์ ธ๋ด๋ ๋์ง๋ง DFS
๊ณผ์ ์์ ์ค๋ณต์ด ๋ฐ์ํ ์ ์๊ณ
์ต์ ๋ถ๋ถ ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ฅด๊ธฐ ๋๋ฌธ์ ๋์ ๊ณํ๋ฒ
์ ์ฌ์ฉํด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.dp(x, sum) = ๋ฐฐ์ด์ x ์์น๋ถํฐ ์ ํํด์ ๊ทธ ํฉ์ด sum์ ๋ง์กฑ์ํค๋ ๊ฒฝ์ฐ์ ์
๋ผ๊ณ ํ๋ค๋ฉด
๋ค์๊ณผ ๊ฐ์ ์ ํ์์ ์ธ์ธ ์ ์์ต๋๋ค.
dp(x, sum) = dp(x+1, sum + x) + dp(x+1, sum - x)
์ฝ๋
/**
* @param {number[]} nums
* @param {number} S
* @return {number}
*/
var findTargetSumWays = function (nums, S) {
const cache = new Map();
function dp(x, sum) {
if (x === nums.length) return sum === S ? 1 : 0;
const key = `${x}#${sum}`;
if (cache.has(key)) return cache.get(key);
const result = dp(x + 1, sum + nums[x]) + dp(x + 1, sum - nums[x]);
cache.set(key, result);
return result;
}
const answer = dp(0, 0);
return answer;
};
'๐ algorithm > leetcode' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
LeetCode 48 - Rotate Image (Medium) (0) | 2021.03.04 |
---|---|
LeetCode 236 - Lowest Common Ancestor of a Binary Tree (Medium) (0) | 2021.03.04 |
LeetCode 187 - Repeated DNA Sequences (Medium) (0) | 2021.03.03 |
LeetCode 3 - Longest Substring Without Repeating Characters (Medium) (0) | 2021.03.03 |
LeetCode 89 - Gray Code (Medium) (0) | 2021.03.03 |
๐ฌ ๋๊ธ