https://school.programmers.co.kr/learn/courses/30/lessons/43165
[๋ฌธ์ ํ์ด]
์ ์๋ค์ ์์๋ฅผ ๋ฐ๊พธ์ง ์๊ณ ๋ํ๊ฑฐ๋ ๋นผ์ ํ๊ฒ ๋๋ฒ๋ฅผ ๋ง๋ค๋ฉด ๋๋ค.
์๋ฅผ ๋ค์ด 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
๋๋ ํธ๋ฆฌ์์ +, - ๊ฐ์ง๋ฅผ ์ณ๊ฐ๋ฉฐ ๋ฐฉ๋ฒ์ ์ฐพ์๋ค.
index 0๋ฒ ๋ถํฐ 5๊น์ง ๊ฐ๋ฉฐ target number 3์ด ๋๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ฐพ์ ๋๋ง๋ค answer ๋ฅผ +1 ์ฉ ํด์ค๋ค.
์ด๋ ๋์์์ ๋ค๋ฅธ ๊ฒฝ๋ก๋ก ํ์ํด์ผ ํ๋ฏ๋ก ํ๋ฒ์ +1๋ก ํ๋ฒ์ -1๋ก DFS ํ์์ ํด์ฃผ๋ฉด ๋๋ค.
์ข ๋ฃ์กฐ๊ฑด์ index๊ฐ์ด numbers ๋ฒกํฐ size์ ๊ฐ์ ๋์ด๊ณ ์ด๋ sum๊ฐ๊ณผ target number์ ๊ฐ์ด ์ผ์นํ๋์ง ํ๋จํด์ฃผ๋ฉด ๋๋ค.
[์์๋ ๊ฒ]
๋์์์ ๋ค๋ฅธ ๊ฒฝ๋ก๋ก ํ์ํ๋ ๋ฐฉ๋ฒ์ ์ฝ๋๋ก ์ง๋ ๋ฒ
DFS(numbers, target, sum + numbers[index], index + 1);
DFS(numbers, target, sum - numbers[index], index + 1);
์ด๋ ๊ฒ ์ฌ๊ทํจ์ return ํ ๋ฐ๋ก ๋ค์์ค์์ ๋ค๋ฅธ ๊ฒฝ๋ก๋ก ํ์ํ๋ฉด ๋๋ค.
์ด๋ฐ ๋ฌธ์ ๊ฐ ์๊ทผ ๋ง์ผ๋ ๊ธฐ์ตํด๋์.
[์ฝ๋]
#include <string>
#include <vector>
using namespace std;
int answer = 0;
void DFS(vector<int> numbers, int target, int sum, int index){
if(index == numbers.size()) {
if(sum == target) answer++;
return;
}
DFS(numbers, target, sum + numbers[index], index + 1);
DFS(numbers, target, sum - numbers[index], index + 1);
}
int solution(vector<int> numbers, int target) {
DFS(numbers, target, 0, 0);
return answer;
}
'๐ Coding Test Study > Algorithm Problem' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++][Programmers][DFS/BFS] ๋คํธ์ํฌ (0) | 2023.05.06 |
---|---|
[C++][Programmers][DFS/BFS] ๊ฒ์ ๋งต ์ต๋จ๊ฑฐ๋ฆฌ (0) | 2023.05.04 |
[C++][Programmers][์์ ํ์] ํผ๋ก๋ (0) | 2023.04.26 |
[C++][Programmers][์์ ํ์] ์นดํซ (0) | 2023.04.24 |
[C++][Programmers][์์ ํ์] ๋ชจ์๊ณ ์ฌ (0) | 2023.04.21 |