๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm๐Ÿฐ/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ํƒ€๊ฒŸ ๋„˜๋ฒ„ DFS C++

by Jouureee 2022. 3. 25.

๋ฌธ์ œ :

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;
}

 

๊ฒฐ๊ณผ : 

๋Œ“๊ธ€