Hello Ocean! ๐ŸŒผ

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

Algorithm

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

bba_dda 2020. 9. 21. 12:26
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ ์„ค๋ช…

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

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

๋ฌธ์ œ์— ๋‚˜์˜จ ์˜ˆ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํ’€์ด

  • value :๊ณ„์‚ฐ ๊ฐ’
  • index : numbers๋ฐฐ์—ด์˜ ๋ช‡๋ฒˆ์งธ ์ˆ˜ ๊นŒ์ง€ ์ด์šฉํ–ˆ๋Š”์ง€
  • value์— numbers[index]๋ฅผ ๋”ํ•˜๊ฑฐ๋‚˜ ๋บ€ ๊ฐ’์„ dfs๋กœ ํƒ์ƒ‰.
  • numbers๋ฐฐ์—ด์˜ ์ˆ˜๋ฅผ ๋ชจ๋‘ ์ด์šฉํ•˜๊ณ , value==target์ธ ๊ฒฝ์šฐ์— answer+1
#include <string>
#include <vector>

using namespace std;
int len; // numbers์˜ ๊ธธ์ด (์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ˆซ์ž ๊ฐœ์ˆ˜)
int answer = 0;

//dfsํ•จ์ˆ˜(์žฌ๊ท€) 
void dfs(int index, int value, int target, vector<int> numbers){
    if (index == len){ //numbers์˜ ์ˆซ์ž๋ฅผ ๋ชจ๋‘ ์ด์šฉํ•ด์„œ
        if (value == target) //target๊ณผ ๊ฐ™์€ ์ˆซ์ž๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค๋ฉด
            answer ++; 
        return; 
    }
    //value์— numbers[index]๋ฅผ ๋”ํ•˜๊ฑฐ๋‚˜ ๋บ€ ๊ฐ’์„ dfs๋กœ ํƒ์ƒ‰ 
    dfs(index + 1, value + numbers[index],target,numbers);
    dfs(index + 1, value - numbers[index],target,numbers);
}
int solution(vector<int> numbers, int target) {
    len = numbers.size();
    dfs(0,0,target,numbers);
    return answer;
}
๋ฐ˜์‘ํ˜•