๋ฐ์ํ
https://programmers.co.kr/learn/courses/30/lessons/43165?language=java
์ฝ๋
class Solution {
public static int answer = 0;
public void dfs(int[] numbers, int target, int index){
// base case:
if(index == numbers.length){
int sum = 0;
for(int i=0; i<numbers.length; i++)
sum += numbers[i];
answer += (sum == target) ? 1 : 0; /* ํฉ๊ณผ target์ด ๊ฐ์ผ๋ฉด +1 ๋ค๋ฅด๋ฉด +0 */
return;
}
dfs(numbers, target, index+1); /* numbers๋ฐฐ์ด ๋ชจ๋ ์ฌ์ฉํ ๋ ๊น์ง dfs ํ์ */
numbers[index] *= -1; /* ๋ชจ๋ ์ฌ์ฉ ํ base case๋ฅผ ํตํด ํจ์ ์ข
๋ฃํ๊ณ ์ ๋จ๊ณ๋ก ๋์๊ฐ์ ์์->์์, ์์->์์ */
dfs(numbers, target, index+1); /* ์์์ ๋ง๋ ์์๋ก ๋ค์ ๋๊น์ง dfs ํ์ */
}
public int solution(int[] numbers, int target) {
dfs(numbers, target, 0);
return answer;
}
}
ํ์ด
๋ฐฐ์ด์ ๋ชจ๋ ์์๋ฅผ ๋ํ๊ฑฐ๋ ๋นผ์ target ๋๋ฒ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์๋ฅผ return,
๋ํ๊ฑฐ๋ ๋นผ๋ ์ฐ์ฐ๊ณผ์ ์ Tree๋ก ๋ณผ๋, '+'์ฐ์ฐ์ ์ผ์ชฝ ์์๋ ธ๋, '-'์ฐ์ฐ์ ์ค๋ฅธ์ชฝ ์์ ๋ ธ๋๋ก ๋ด๋ ค๊ฐ๋ ๊ณผ์ ์ผ๋ก ์ฌ๊ทํธ์ถ์ ํตํด ํด๊ฒฐํ๋ค.(๊น์ด์ฐ์ ํ์, dfs)
๊ธฐ์ ์ฌ๋ก๋ ๋ฐฐ์ด์ ๋ชจ๋ ์์๋ฅผ ์ฌ์ฉํ ๋(index == numbers.length) ์ด๋ค.
์ ๊ณผ์ ์ ์๋ํ๋ธ ์ด๋ฏธ์ง๊ฐ ์์ด์ ์ฐธ๊ณ ํ๋ค.
๋ฐ์ํ
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก๊ทธ๋๋จธ์ค[Java] - ํฌ๋ ์ธ ์ธํ๋ฝ๊ธฐ ๊ฒ์(Stack, 2019 ์นด์นด์ค ๊ฐ๋ฐ์ ๊ฒจ์ธ ์ธํด์ญ) (2) | 2020.03.31 |
---|---|
[๋ฐฑ์ค] 9576๋ฒ: ์ฑ ๋๋ ์ฃผ๊ธฐ(๊ทธ๋ฆฌ๋) (0) | 2020.03.31 |
[Codeforces] 1270A: Card Game (0) | 2020.03.29 |
[๋ฐฑ์ค] 4949๋ฒ: ๊ท ํ์กํ ์ธ์(์คํ, ๋ฌธ์์ด) (0) | 2020.03.27 |
[๋ฐฑ์ค] 5555๋ฒ: ๋ฐ์ง(๋ฌธ์์ด) (0) | 2020.03.27 |
๋๊ธ