
1. ๐ ๋ค์ด๊ฐ๋ฉฐ
DFS ๊น์ด ์ฐ์ ํ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ ํ๋ก๊ทธ๋๋จธ์ค 'ํ๊ฒ ๋๋ฒ' ๋ฌธ์ ํ์ด๋ฅผ ํด๋ณด๊ฒ ๋ค.
2. โ ๋ฌธ์
2.0.1. ๋ฌธ์ ์ค๋ช
n๊ฐ์ ์์ด ์๋ ์ ์๋ค์ด ์์ต๋๋ค. ์ด ์ ์๋ค์ ์์๋ฅผ ๋ฐ๊พธ์ง ์๊ณ ์ ์ ํ ๋ํ๊ฑฐ๋ ๋นผ์ ํ๊ฒ ๋๋ฒ๋ฅผ ๋ง๋ค๋ ค๊ณ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด [1, 1, 1, 1, 1]๋ก ์ซ์ 3์ ๋ง๋ค๋ ค๋ฉด ๋ค์ ๋ค์ฏ ๋ฐฉ๋ฒ์ ์ธ ์ ์์ต๋๋ค.
-1+1+1+1+1 = 3
+1-1+1+1+1 = 3
+1+1-1+1+1 = 3
+1+1+1-1+1 = 3
+1+1+1+1-1 = 3
์ฌ์ฉํ ์ ์๋ ์ซ์๊ฐ ๋ด๊ธด ๋ฐฐ์ด numbers, ํ๊ฒ ๋๋ฒ target์ด ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋ ์ซ์๋ฅผ ์ ์ ํ ๋ํ๊ณ ๋นผ์ ํ๊ฒ ๋๋ฒ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
2.0.2. ์ ํ ์ฌํญ
- ์ฃผ์ด์ง๋ ์ซ์์ ๊ฐ์๋ 2๊ฐ ์ด์ 20๊ฐ ์ดํ์ ๋๋ค.
- ๊ฐ ์ซ์๋ 1 ์ด์ 50 ์ดํ์ธ ์์ฐ์์ ๋๋ค.
- ํ๊ฒ ๋๋ฒ๋ 1 ์ด์ 1000 ์ดํ์ธ ์์ฐ์์ ๋๋ค.
2.0.3. ์ ์ถ๋ ฅ ์
numbers | target | retrun |
[1,1,1,1,1] | 3 | 5 |
[4,1,2,1] | 4 | 2 |
2.0.4. ์ ์ถ๋ ฅ ์ ์ค๋ช
์์ #1
๋ฌธ์ ์์์ ๊ฐ์ต๋๋ค.
์์ #2
+4+1-2+1 = 4
+4-1+2-1 = 4
3. ๐ก ํ์ด
์ฝ๋
<javascript />
function solution(numbers, target) {
let answer = 0;
const length = numbers.length;
function dfs(count, sum) {
if (count === length) {
if (target === sum) {
answer++;
}
return;
}
dfs(count + 1, sum + numbers[count]);
dfs(count + 1, sum - numbers[count]);
}
dfs(0, 0);
return answer;
}
๊ธฐ๋ณธ์ ์ธ DFS ๋ฌธ์ ๋ค.
๋ฐฐ์ด [1, 2, 3]๋ก ์๋ฅผ ํ๋ ๋ ๋ค์ด๋ณด๋ฉด
1 + 2 + 3์ธ ๊ฒฝ์ฐ, 1 + 2 - 3์ธ ๊ฒฝ์ฐ, 1 - 2 + 3์ธ ๊ฒฝ์ฐ, 1 - 2 - 3์ธ ๊ฒฝ์ฐ. ๋ชจ๋ ๊ฒฝ์ฐ์ ์์ ๊ฒฐ๊ณผ ๊ฐ์ ์ฐพ์์ target ๋๋ฒ์ ๊ฐ์ ๊ฐ์๋ฅผ ์ฐพ๋ ๋ฌธ์ ๋ค.
์ฌ๊ท ํจ์๋ฅผ ํธ์ถํ ๋ ์ค๋จ ์ ์ ์ง์ ํด ์ค count ์ธ์์ ์ซ์๋ค์ ํฉ์ ๋๊ฒจ์ค sum ์ธ์ ์ด ๋ ๊ฐ์ง ์ธ์๋ฅผ ์ง์ ํด์ฃผ๋๋กํ๋ค.
count๊ฐ for๋ฌธ์์ index ์ญํ ์ ํ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
๋งค๊ฐ๋ณ์๋ก ๋์ด์จ count๋ numbers ๋ฐฐ์ด์ ๊ธธ์ด๋ ๊ฐ์์ง๊ณ , ๊ทธ๋ target๊ณผ sum์ ๊ฐ์ด ๊ฐ๋ค๋ฉด answer์ ๊ฐ์ ์ฆ๊ฐ์ํค๊ณ ํ์ฌ ํจ์๋ฅผ ์ข ๋ฃ์ํค๋๋ก ํ๋ค.
ํ์ง๋ง, ์ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋ฉด
๋ค์ dfsํจ์์ count๋ฅผ + 1 ์ฆ๊ฐ์ํค๊ณ , ์ฐ์ฐ์ '+'๋ฅผ ๊ณ์ฐํ ์ ์๋๋ก sum๊ณผ numbers์ ์ซ์ ํ๋๋ฅผ ๊บผ๋ด ํฉ์ ๊ณ์ฐํ ๊ฐ์ ์ธ์๋ก ์ฃผ๊ณ ,
'+'๋ฅผ ๊ณ์ฐํ ํจ์๊ฐ ๋๋ฌ๋ค๋ฉด ์ฐ์ฐ์ '-'๋ฅผ ๊ณ์ฐํ ์ ์๋๋ก sum๊ณผ numbers์ ์ซ์ ํ๋๋ฅผ ๊บผ๋ด์ ์ฐจ์ด๋ฅผ ๊ณ์ฐํ ๊ฐ์ ์ธ์๋ก ์ฃผ์๋ค.
์์ #2๋ฅผ ์์๋ก ๋๋ต์ ํธ๋ฆฌ๋ฅผ ๊ทธ๋ ค๋ณด์๋ค.
+๋ฅผ ํ๋ dfsํจ์๋ ์ผ์ชฝ์ผ๋ก ๋ป๊ณ , -๋ฅผ ํ๋ dfsํจ์๋ ์ค๋ฅธ์ชฝ์ผ๋ก ๋ป์ด์ ๋ฐ์์๋ถํฐ ํ์ํ๊ฒ ๋๋ค.

4. โ ์ฑ์
