728x90
์ฝ๊ฐ ์.... ์ด๋ฐ ๋ถ์๊ธฐ์ ๋ฌธ์ ๊ฐ ์๋ค. ๋ฑ ํ๋ ์ ๋ ์ฐจ์ด๋๋ +์ - / ์ธ์ ํ ์ฃผ๋ณ์ ๊ฒ๋ค์ ๋น๊ตํ๊ณ ๋ฑ๋ฑ
์ด๊ฒ ๋ฐ๋ก dfs ์ฌ๊ทํจ์๋ฅผ ํ๋ผ๋ ๊ฒ์ด๋ค. ์นด์นด์ค ์ปฌ๋ฌ๋ง๋ถ ๋ฌธ์ ๋ ๋น์ทํ๋ค. ๋๋์ ์ ์งํ์.
#include <string>
#include <vector>
using namespace std;
int answer = 0;
void recur(vector<int> numbers, int target, int sum, int count) {
// count๋ ๊ณ์์ ์ผ๋ก ์์ count๊ฐ numbers ๋ฐฐ์ด์ ํฌ๊ธฐ์ ๊ฐ์์ง ๊ฒฝ์ฐ์
// sum ๋ํ ์ํ๋ ํฉ target๊ณผ ๋์ผํ๋ค๋ฉด answer๋ฅผ ์ฆ๊ฐ์ํค๊ณ return;์ผ๋ก ๋์๊ฐ๋ค.
if(count == numbers.size()) {
if(sum == target) answer++;
return;
}
// ํ๋ผ๋ฏธํฐ ์ค ํ๋๋ก ๋์ด๊ฐ๋ ๊ฒ์ด sum์ด๋ค. ํ๋๋ ๋ํ๊ณ ํ๋๋ ๋นผ์ค์ผ ํ๋ค.
// ์ฆ numbers์ ์ธ์๊ฐ 5๊ฐ์ด๋ฉด 2์ 5์น == 32๊ฐ์ case๋ฅผ ์ ๋ถ ํ์ํ๋ ๊ฒ.
recur(numbers, target, sum+numbers[count], count+1);
recur(numbers, target, sum-numbers[count], count+1);
}
int solution(vector<int> numbers, int target) {
// ์ฌ๊ทํจ์๋ฅผ ํธ์ถํ๋ค.
recur(numbers, target, 0, 0);
return answer;
}