๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/2๋‹จ๊ณ„

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

by Jaeguk 2022. 6. 20.
๋ฌธ์ œ ๋งํฌ

https://programmers.co.kr/learn/courses/30/lessons/43165

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ํƒ€๊ฒŸ ๋„˜๋ฒ„

n๊ฐœ์˜ ์Œ์ด ์•„๋‹Œ ์ •์ˆ˜๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ •์ˆ˜๋“ค์„ ์ˆœ์„œ๋ฅผ ๋ฐ”๊พธ์ง€ ์•Š๊ณ  ์ ์ ˆํžˆ ๋”ํ•˜๊ฑฐ๋‚˜ ๋นผ์„œ ํƒ€๊ฒŸ ๋„˜๋ฒ„๋ฅผ ๋งŒ๋“ค๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด [1, 1, 1, 1, 1]๋กœ ์ˆซ์ž 3์„ ๋งŒ๋“ค๋ ค๋ฉด ๋‹ค์Œ ๋‹ค์„ฏ ๋ฐฉ๋ฒ•์„ ์“ธ ์ˆ˜

programmers.co.kr

์ฃผ์–ด์ง„ ์ˆซ์ž ๋ฐฐ์—ด์— ์žˆ๋Š” ์ˆซ์ž๋ฅผ ๊ฐ๊ฐ ๋”ํ•˜๊ฑฐ๋‚˜ ๋นผ์„œ ํƒ€๊ฒŸ ๋„˜๋ฒ„๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ.

ํ’€์ด

์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋‹ค ํ•ด๋ณด์•„์•ผํ•œ๋‹ค.

ํ˜„์žฌ ์ˆซ์ž๋ฅผ value๋ผ๊ณ  ํ–ˆ์„ ๋•Œ value๊ฐ’์— numbers๋ฐฐ์—ด์— ์žˆ๋Š” ์ž„์˜์˜ ๊ฐ’ numbers[i] ๋ฅผ ๋”ํ•˜๊ฑฐ๋‚˜ ๋นผ๊ฑฐ๋‚˜ 2๊ฐ€์ง€ ๊ฒฝ์šฐ๋กœ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ชจ๋“  ์ˆซ์ž๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค๊ณ  ํ–ˆ์œผ๋ฏ€๋กœ ๋”ํ•˜๊ฑฐ๋‚˜ ๋นผ๊ฑฐ๋‚˜ ๋‘๊ฐ€์ง€ ๊ฒฝ์šฐ๋งŒ ์ƒ๊ฐํ•œ๋‹ค. ๋˜ํ•œ ๋ชจ๋“  ์ˆซ์ž๋ฅผ ์“ฐ๊ธฐ์ „์— target ๋„˜๋ฒ„๋ฅผ ์™„์„ฑํ•˜๋ฉด ์ด๋•Œ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋กœ ์ƒ๊ฐํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ด๋•Œ value์˜ ์ดˆ๊ธฐ๊ฐ’์€ 0์ด๋‹ค.

์žฌ๊ท€ํ•จ์ˆ˜์˜ ๊นŠ์ด(depth)๊ฐ€ ๋ฐฐ์—ด์— ์žˆ๋Š” ์ˆซ์ž์˜ ์ด ๊ฐœ์ˆ˜์™€ ๊ฐ™์„ ๋•Œ, ๋ชจ๋“  ์ˆซ์ž๋ฅผ ์ด์šฉํ–ˆ๋‹ค๋Š” ๋œป์ด๋‹ค.

์ด๋•Œ ํ˜„์žฌ value๊ฐ€ target๊ณผ ๊ฐ™์œผ๋ฉด answer๋ฅผ  +1 ํ•ด์ฃผ๊ณ  ์•„๋‹ˆ๋ฉด ๊ทธ๋ƒฅ ๋ฆฌํ„ดํ•œ๋‹ค.

 
#include <string>
#include <vector>
 
using namespace std;
 
void dfs(int depth, vector<int> numbers, int value, int target, int &answer, int N){
    if(depth == N){
        if(value == target)
            answer++;
        return;
    }
    dfs(depth + 1, numbers, value + numbers[depth], target, answer, N); //๋”ํ•˜๊ฑฐ๋‚˜
    dfs(depth + 1, numbers, value - numbers[depth], target, answer, N); //๋นผ๊ฑฐ๋‚˜
}
 
int solution(vector<int> numbers, int target) {
    int answer = 0;
    dfs(0, numbers, 0, target, answer, numbers.size());
    return answer;
}
cs

 

 

728x90