๐Ÿ’ป์šฉ๋‡ฝ ๊ฐœ๋ฐœ ๋…ธํŠธ๐Ÿ’ป
article thumbnail
๋ฐ˜์‘ํ˜•

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํƒ€๊ฒŸ ๋„˜๋ฒ„ ๋ฌธ์ œ ํ’€์ด

๐Ÿ“– ๋“ค์–ด๊ฐ€๋ฉฐ

DFS ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค 'ํƒ€๊ฒŸ ๋„˜๋ฒ„' ๋ฌธ์ œ ํ’€์ด๋ฅผ ํ•ด๋ณด๊ฒ ๋‹ค.

โ“ ๋ฌธ์ œ 

๋ฌธ์ œ ์„ค๋ช…

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 retrun
[1,1,1,1,1] 3 5
[4,1,2,1] 4 2

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

์˜ˆ์ œ #1
๋ฌธ์ œ ์˜ˆ์‹œ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์˜ˆ์ œ #2

+4+1-2+1 = 4
+4-1+2-1 = 4

๐Ÿ’ก ํ’€์ด

์ฝ”๋“œ

function solution(numbers, target) {
  let answer = 0;
  const length = numbers.length;

  function dfs(count, sum) {
    if (count === length) {
      if (target === sum) {
        answer++;
      }
      return;
    }

    dfs(count + 1, sum + numbers[count]);
    dfs(count + 1, sum - numbers[count]);
  }

  dfs(0, 0);

  return answer;
}

๊ธฐ๋ณธ์ ์ธ DFS ๋ฌธ์ œ๋‹ค.

๋ฐฐ์—ด [1, 2, 3]๋กœ ์˜ˆ๋ฅผ ํ•˜๋‚˜ ๋” ๋“ค์–ด๋ณด๋ฉด 

1 + 2 + 3์ธ ๊ฒฝ์šฐ, 1 + 2 - 3์ธ ๊ฒฝ์šฐ, 1 - 2 + 3์ธ ๊ฒฝ์šฐ, 1 - 2 - 3์ธ ๊ฒฝ์šฐ. ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜์˜ ๊ฒฐ๊ณผ ๊ฐ’์„ ์ฐพ์•„์„œ target ๋„˜๋ฒ„์™€ ๊ฐ™์€ ๊ฐœ์ˆ˜๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ๋‹ค.

 

์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์ค‘๋‹จ ์ ์„ ์ง€์ •ํ•ด ์ค„ count ์ธ์ˆ˜์™€ ์ˆซ์ž๋“ค์˜ ํ•ฉ์„ ๋„˜๊ฒจ์ค„ sum ์ธ์ˆ˜ ์ด ๋‘ ๊ฐ€์ง€ ์ธ์ˆ˜๋ฅผ ์ง€์ •ํ•ด์ฃผ๋„๋กํ–ˆ๋‹ค.

count๊ฐ€ for๋ฌธ์—์„œ index ์—ญํ• ์„ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

 

๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋„˜์–ด์˜จ count๋Š” numbers ๋ฐฐ์—ด์˜ ๊ธธ์ด๋ž‘ ๊ฐ™์•„์ง€๊ณ , ๊ทธ๋•Œ target๊ณผ sum์˜ ๊ฐ’์ด ๊ฐ™๋‹ค๋ฉด answer์˜ ๊ฐ’์„ ์ฆ๊ฐ€์‹œํ‚ค๊ณ  ํ˜„์žฌ ํ•จ์ˆ˜๋ฅผ ์ข…๋ฃŒ์‹œํ‚ค๋„๋ก ํ–ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ, ์œ„ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด

๋‹ค์‹œ dfsํ•จ์ˆ˜์— count๋ฅผ + 1 ์ฆ๊ฐ€์‹œํ‚ค๊ณ , ์—ฐ์‚ฐ์ž '+'๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋„๋ก sum๊ณผ numbers์˜ ์ˆซ์ž ํ•˜๋‚˜๋ฅผ ๊บผ๋‚ด ํ•ฉ์„ ๊ณ„์‚ฐํ•œ ๊ฐ’์„ ์ธ์ˆ˜๋กœ ์ฃผ๊ณ ,

'+'๋ฅผ ๊ณ„์‚ฐํ•œ ํ•จ์ˆ˜๊ฐ€ ๋๋‚ฌ๋‹ค๋ฉด ์—ฐ์‚ฐ์ž '-'๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋„๋ก sum๊ณผ numbers์˜ ์ˆซ์ž ํ•˜๋‚˜๋ฅผ ๊บผ๋‚ด์„œ ์ฐจ์ด๋ฅผ ๊ณ„์‚ฐํ•œ ๊ฐ’์„ ์ธ์ˆ˜๋กœ ์ฃผ์—ˆ๋‹ค.

 

์˜ˆ์ œ#2๋ฅผ ์˜ˆ์‹œ๋กœ ๋Œ€๋žต์˜ ํŠธ๋ฆฌ๋ฅผ ๊ทธ๋ ค๋ณด์•˜๋‹ค.

+๋ฅผ ํ•˜๋Š” dfsํ•จ์ˆ˜๋Š” ์™ผ์ชฝ์œผ๋กœ ๋ป—๊ณ , -๋ฅผ ํ•˜๋Š” dfsํ•จ์ˆ˜๋Š” ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋ป—์–ด์„œ ๋ฐ‘์—์„œ๋ถ€ํ„ฐ ํƒ์ƒ‰ํ•˜๊ฒŒ ๋œ๋‹ค.

์˜ˆ์ œ 2 ํŠธ๋ฆฌ

โœ” ์ฑ„์ 

์ฑ„์  ๊ฒฐ๊ณผ

๋ฐ˜์‘ํ˜•
profile

๐Ÿ’ป์šฉ๋‡ฝ ๊ฐœ๋ฐœ ๋…ธํŠธ๐Ÿ’ป

@์šฉ๋‡ฝ

ํฌ์ŠคํŒ…์ด ์ข‹์•˜๋‹ค๋ฉด "์ข‹์•„์š”โค๏ธ" ๋˜๋Š” "๊ตฌ๋…๐Ÿ‘๐Ÿป" ํ•ด์ฃผ์„ธ์š”!