[ํ๋ก๊ทธ๋๋จธ์ค] ํ๊ฒ ๋๋ฒ DFS C++
๋ฌธ์ :
https://programmers.co.kr/learn/courses/30/lessons/43165
์ฝ๋ฉํ ์คํธ ์ฐ์ต - ํ๊ฒ ๋๋ฒ
n๊ฐ์ ์์ด ์๋ ์ ์๋ค์ด ์์ต๋๋ค. ์ด ์ ์๋ค์ ์์๋ฅผ ๋ฐ๊พธ์ง ์๊ณ ์ ์ ํ ๋ํ๊ฑฐ๋ ๋นผ์ ํ๊ฒ ๋๋ฒ๋ฅผ ๋ง๋ค๋ ค๊ณ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด [1, 1, 1, 1, 1]๋ก ์ซ์ 3์ ๋ง๋ค๋ ค๋ฉด ๋ค์ ๋ค์ฏ ๋ฐฉ๋ฒ์ ์ธ ์
programmers.co.kr
๋ถ์ :
์ฌ๊ท ๋ฐฉ์์ ์ด์ฉํด์ ํ์๋ค. DFS/ BFS๋ ์ฌ๊ท or stack + visit ํ๋ณ ๋ฐฉ์์ผ๋ก ํ ์ ์๋๋ฐ ์ด๋ฒ ๋ฌธ์ ๋ ์ฌ๊ท๊ฐ ๋ ์ง๊ด์ ์ผ ๊ฒ ๊ฒ ๊ฐ์์ ์ฌ๊ท ๋ฐฉ์์ผ๋ก ์ ๊ทผํ๋ค. ์ค์ํ ๊ฒ์ ์ฌ๊ท ์ข ๋ฃ ์กฐ๊ฑด์ด๋ค. ์ด ์์์ ์ซ์๋งํผ depth๋ฅผ ๋ด๋ ค๊ฐ๋ค๋ฉด ๋น ์ ธ๋์จ๋ค.
์ฒ์์ -๋ก dfs๋ฅผ ๋๋ depth๋ฅผ ์ ์ฆ๊ฐ์์ผ์ฃผ๋ ์๋ฌธ์ด์๋๋ฐ ์ ์ฌ๊ท์์ return ์ ์์ ์ ๋ฃจํธ ๋ ธ๋๋ก ๋์์ค๊ธฐ ๋๋ฌธ์ ๋ง์ฐฌ๊ฐ์ง๋ก depth + 1 ํด์ฃผ์ด์ผ ํ๋ค.
ํํฌ์ ๊ธ์จ๋ ๋ฐฉ๋ฌธ ์์๋ค !!
c++ ์ฝ๋ :
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int cnt = 0;
void dfs(vector<int> numbers, int target, int sum, int depth){
if(depth == numbers.size()){ // ์ข
๋ฃ ์กฐ๊ฑด
if(sum == target){
cnt++;
}
return;
}else {
dfs(numbers, target, sum + numbers[depth], depth+1);
dfs(numbers, target, sum - numbers[depth], depth+1);
}
}
int solution(vector<int> numbers, int target) {
dfs(numbers, target, 0, 0);
return cnt;
}
๊ฒฐ๊ณผ :