• Source
    1. #include <iostream>
    2. #include <string>
    3. #include <vector>
    4. #include <cmath>
    5.  
    6. using namespace std;
    7.  
    8. vector<int> gNumbers;
    9. int numbers_size;
    10. int g_target;
    11. int answer;
    12.  
    13. void BFS() {
    14. vector<int> temp_sum, sum;
    15. int sum_counter = 0;
    16. double sum_result_size = pow(2, numbers_size);
    17. temp_sum.resize(sum_result_size, 0);
    18. sum.resize(sum_result_size, 0);
    19.  
    20. //idx 0
    21. sum[sum_counter++] = + gNumbers[0];
    22. sum[sum_counter++] = - gNumbers[0];
    23.  
    24.  
    25. //idx 1~ numbers size
    26. for (int numInx = 1; numInx < numbers_size; numInx++) {
    27. temp_sum = sum;
    28. sum_counter = 0;
    29. double recurse = pow(2, numInx);
    30. for (int i = 0; i < recurse ; i++) {
    31. sum[sum_counter++] = temp_sum[i] + gNumbers[numInx];
    32. sum[sum_counter++] = temp_sum[i] - gNumbers[numInx];
    33. }
    34. cout << "sum_counter : " << sum_counter << " numInx : " << numInx << endl;
    35. }
    36.  
    37. for (int numInx = 0; numInx < sum_result_size; numInx++) {
    38. if (g_target == sum[numInx]) {
    39. answer++;
    40. }
    41. }
    42. return;
    43. }
    44.  
    45. int solution(vector<int> numbers, int target) {
    46. answer = 0;
    47. gNumbers = numbers;
    48. g_target = target;
    49. numbers_size = numbers.size();
    50. BFS();
    51.  
    52. return answer;
    53. }
    54.  
    55. int main()
    56. {
    57. vector<int> numbers = {1, 1, 1, 1, 1};
    58. cout << solution(numbers,3);
    59. }