[νλ‘κ·Έλλ¨Έμ€] νκ² λλ², C++
λ¬Έμ μ€λͺ
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 |
μ μΆλ ₯ μ μ€λͺ
λ¬Έμ μ λμ¨ μμ κ°μ΅λλ€.
νμ΄
- value :κ³μ° κ°
- index : numbersλ°°μ΄μ λͺλ²μ§Έ μ κΉμ§ μ΄μ©νλμ§
- valueμ numbers[index]λ₯Ό λνκ±°λ λΊ κ°μ dfsλ‘ νμ.
- numbersλ°°μ΄μ μλ₯Ό λͺ¨λ μ΄μ©νκ³ , value==targetμΈ κ²½μ°μ answer+1
#include <string>
#include <vector>
using namespace std;
int len; // numbersμ κΈΈμ΄ (μ΄μ©ν μ μλ μ«μ κ°μ)
int answer = 0;
//dfsν¨μ(μ¬κ·)
void dfs(int index, int value, int target, vector<int> numbers){
if (index == len){ //numbersμ μ«μλ₯Ό λͺ¨λ μ΄μ©ν΄μ
if (value == target) //targetκ³Ό κ°μ μ«μλ₯Ό λ§λ€μλ€λ©΄
answer ++;
return;
}
//valueμ numbers[index]λ₯Ό λνκ±°λ λΊ κ°μ dfsλ‘ νμ
dfs(index + 1, value + numbers[index],target,numbers);
dfs(index + 1, value - numbers[index],target,numbers);
}
int solution(vector<int> numbers, int target) {
len = numbers.size();
dfs(0,0,target,numbers);
return answer;
}