๐ ๋ฌธ์
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 ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
๐ซ ์ ํ ์ฌํญ
โ๏ธ ์ ์ถ๋ ฅ
๐ก ํ์ด
์ฃผ์ด์ง numbers์ ์ซ์๋ค์ ์กฐํฉํ์ฌ target์ ์ซ์์ ๋์ผํ ๊ฒฝ์ฐ๋ฅผ ์ธ์ผํ๋ค.
numbers์ ์๋ ๊ฐ ์ซ์๋ค์ +์ -์ ๊ฒฝ์ฐ๋ฅผ ๊ฐ์ง ์ ์๋ค. ์ฆ, ๊ฐ ์ซ์๋ค์ ๋ถํธ์ ๋ฐ๋ผ ๊ฐ์ด ๋ค ๋ค๋ฅด๋ฏ๋ก 2๊ฐ์ง ๊ฒฝ์ฐ๋ฅผ ๊ฐ์ง๊ฒ ๋๋ค.
idx๋ dfs์ ๊น์ด์ numbers์ ์ธ๋ฑ์ค๋ฅผ ๋ชจ๋ ๋ํ๋ธ๋ค. values๋ ๊ทธ๋ํ๋ฅผ ํ์ํด๊ฐ๋ฉด์ target์ ํฅํด ๊ณ์ฐํด๋ ๊ฐ๋ค์ด๋ค.
๋ ์ด์ ํ์ํ ๊น์ด๊ฐ ์๊ณ , target๊ฐ๊ณผ values๊ฐ ์ผ์นํ๋ค๋ฉด global ๋ณ์ cnt๋ฅผ 1 ์ฆ๊ฐ์ํจ๋ค.
cnt = 0
def dfs(numbers, target, idx, values):
global cnt
if idx == len(numbers) :
if values == target :
cnt += 1
return
else :
dfs(numbers, target, idx+1, values + numbers[idx])
dfs(numbers, target, idx+1, values - numbers[idx])
def solution(numbers, target) :
global cnt
dfs(numbers, target, 0, 0)
return cnt
728x90