νκ² λλ² (with.Java)
νκ² λλ² (with.Java) μ λνμ¬ μμλ³Έ κΈμ λλ€.
μ½λ© ν μ€νΈ λ¬Έμ λ₯Ό νλ©°, νμλ λ¬Έμ μ λν νκ³ μ λ€λ₯Έ νμ΄ λ°©λ²μ μμ보며, μμκ°κ³ μ ν©λλ€.
λ¬Έμ μ λν΄ λ¨Όμ μμλ³΄κ² μ΅λλ€.
λ¬Έμ
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κ° μ΄μ 20κ° μ΄νμ λλ€.
- κ° μ«μλ 1 μ΄μ 50 μ΄νμΈ μμ°μμ λλ€.
- νκ² λλ²λ 1 μ΄μ 1000 μ΄νμΈ μμ°μμ λλ€.
μ μΆλ ₯ μ
numbers | target | return |
---|---|---|
[1, 1, 1, 1, 1] | 3 | 5 |
[4, 1, 2, 1] | 4 | 2 |
λ¬Έμ νμ΄
class Solution {
static int answer;
public int solution(int[] numbers, int target) {
answer = 0;
dfs(numbers, target, 0, 0);
return answer;
}
public void dfs(int[] numbers, int target, int depth, int total){
if(numbers.length == depth){
if(total == target){
answer++;
}
}else{
dfs(numbers, target, depth + 1, total + numbers[depth]);
dfs(numbers, target, depth + 1, total - numbers[depth]);
}
}
}
νμ΄ μ€λͺ
- ν΄λμ€μ λ³μ μ μΈ class Solution: λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν ν΄λμ€μ λλ€. static int answer: μ μ λ³μ answerλ νκ² λλ²λ₯Ό λ§λ€ μ μλ κ²½μ°μ μλ₯Ό μ μ₯ν©λλ€.
- solution λ©μλ public int solution(int[] numbers, int target): μ£Όμ΄μ§ μ«μ λ°°μ΄ numbersμ λͺ©ν μ«μ targetμ μ λ ₯μΌλ‘ λ°μ νκ² λλ²λ₯Ό λ§λ€ μ μλ κ²½μ°μ μλ₯Ό λ°νν©λλ€. answer = 0: κ²½μ°μ μλ₯Ό μ΄κΈ°νν©λλ€. dfs(numbers, target, 0, 0): κΉμ΄ μ°μ νμμ μμν©λλ€. μ΄κΈ° κΉμ΄λ 0, μ΄κΈ° ν©κ³λ 0μΌλ‘ μ€μ ν©λλ€. return answer: μ΅μ’ μ μΌλ‘ κ³μ°λ κ²½μ°μ μλ₯Ό λ°νν©λλ€.
- dfs λ©μλ public void dfs(int[] numbers, int target, int depth, int total): κΉμ΄ μ°μ νμμ μννλ μ¬κ· λ©μλμ λλ€. if(numbers.length == depth): λ°°μ΄μ λμ λλ¬νλμ§ νμΈν©λλ€. if(total == target): νμ¬ ν©κ³ totalμ΄ λͺ©ν μ«μ targetκ³Ό κ°μΌλ©΄ κ²½μ°μ μλ₯Ό μ¦κ°μν΅λλ€. else: λ°°μ΄μ λμ λλ¬νμ§ μμλ€λ©΄ λ€μ λ¨κ³λ‘ λμ΄κ°λλ€. dfs(numbers, target, depth + 1, total + numbers[depth]): νμ¬ μ«μλ₯Ό λν κ²½μ°λ₯Ό νμν©λλ€. dfs(numbers, target, depth + 1, total - numbers[depth]): νμ¬ μ«μλ₯Ό λΊ κ²½μ°λ₯Ό νμν©λλ€.
κ²°λ‘
μ΄ μ½λλ DFSλ₯Ό μ¬μ©νμ¬ λͺ¨λ κ°λ₯ν κ²½μ°λ₯Ό νμνκ³ , λͺ©ν μ«μμ μΌμΉνλ κ²½μ°μ μλ₯Ό κ³μ°ν©λλ€.
μ£Όμ΄μ§ μ«μ λ°°μ΄κ³Ό λͺ©ν μ«μκ° μ£Όμ΄μ‘μ λ, μ΄ μ½λλ₯Ό ν΅ν΄ νκ² λλ²λ₯Ό λ§λ€ μ μλ λͺ¨λ κ²½μ°μ μλ₯Ό ν¨μ¨μ μΌλ‘ ꡬν μ μμ΅λλ€.