๋ฌธ์ ์ค๋ช
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 |
ํ์ด
DFS ์๊ณ ๋ฆฌ์ฆ์ ํ์ฉํ ๋ฌธ์ ์ด๋ค.
- sum = ํ์ฌ ์์ ํฉ(๋ชฉํ : ํ๊ฒ ๋๋ฒ)
- count = ์ฃผ์ด์ง ์ซ์๋ฅผ ์ฌ์ฉํ ํ์
- ์ข ๋ฃ ์กฐ๊ฑด : count๊ฐ ์ฃผ์ด์ง ์ซ์์ ๊ฐ์์ ๋์ผํ๊ณ , sum์ด ํ๊ฒ ๋๋ฒ์ ๊ฐ์ ๋
sum + numbers[count]์ sum - numbers[count] ๋ ์ข ๋ฅ๋ก ๋๋ ์ ๋ค์ targetNumber ํจ์๋ฅผ ํธ์ถํ๋ค. (์๋ฅผ ๋ํ๋ ๊ฒฝ์ฐ, ๋นผ๋ ๊ฒฝ์ฐ)
์ด ๋, count๋ ํญ์ ์ฆ๊ฐํ๋ค!!
#include <string>
#include <vector>
using namespace std;
int answer = 0;
void targetNumber(vector<int> numbers, int target, int sum, int count){
if (count == numbers.size()){
if (sum == target) answer++;
return;
}
targetNumber(numbers, target, sum+numbers[count], count+1); // ์ค๋ฅธ์ชฝ
targetNumber(numbers, target, sum-numbers[count], count+1); // ์ผ์ชฝ
}
int solution(vector<int> numbers, int target) {
targetNumber(numbers, target, 0, 0);
return answer;
}
'โจ Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค/C++] 1260๋ฒ : DFS์ BFS (0) | 2021.08.24 |
---|---|
[๊ฐ๋ ] DFS์ BFS (0) | 2021.08.24 |
[ํ๋ก๊ทธ๋๋จธ์ค/C++] ์ฒด์ก๋ณต(Greedy) (0) | 2021.08.24 |
[๋ฐฑ์ค/C++] 11399๋ฒ : ATM (0) | 2021.08.16 |
[๋ฐฑ์ค/C++] 11047๋ฒ : ๋์ 0 (0) | 2021.08.16 |
๋๊ธ