https://programmers.co.kr/learn/courses/30/lessons/43165
์ฝ๋ฉํ
์คํธ ์ฐ์ต - ํ๊ฒ ๋๋ฒ
n๊ฐ์ ์์ด ์๋ ์ ์๋ค์ด ์์ต๋๋ค. ์ด ์ ์๋ค์ ์์๋ฅผ ๋ฐ๊พธ์ง ์๊ณ ์ ์ ํ ๋ํ๊ฑฐ๋ ๋นผ์ ํ๊ฒ ๋๋ฒ๋ฅผ ๋ง๋ค๋ ค๊ณ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด [1, 1, 1, 1, 1]๋ก ์ซ์ 3์ ๋ง๋ค๋ ค๋ฉด ๋ค์ ๋ค์ฏ ๋ฐฉ๋ฒ์ ์ธ ์
programmers.co.kr
๋ฌธ์ ์ ํ : DFS / BFS
ํ์ด
dfs(idx, ๋์ ๊ฐ):
if idx == numbers์ ๊ฐ์ # ์ฌ๊ท ์ข
๋ฃ์กฐ๊ฑด : ๋ชจ๋ ์์๋ฅผ ๋ํ๊ฑฐ๋ ๋บ๋ค๋ฉด ์ข
๋ฃ
if ๋์ ๊ฐ == target: # ๋ชจ๋ ์์๋ฅผ ๋ํ๊ฑฐ๋ ๋บ๋๋ฐ, ๋์ ๊ฐ์ด target๊ณผ ์ผ์นํ๋ฉด answer += 1
answer += 1
return
# ์์ง ์ข
๋ฃ์ ์ด๋ผ๋ฉด
dfs(idx, ๋์ ๊ฐ + numbers[idx]) # ๋ค์ ์ซ์๋ฅผ ๋ํ๋ ๊ฒฝ๋ก
dfs(idx, ๋์ ๊ฐ - numbers[idx]) # ๋ค์ ์ซ์๋ฅผ ๋นผ๋ ๊ฒฝ๋ก
answer = 0
def dfs(max_len, cnt, result, target, numbers):
if cnt == max_len:
if result == target:
global answer
answer += 1
return
dfs(max_len, cnt + 1, result + numbers[cnt] ,target, numbers)
dfs(max_len, cnt + 1, result - numbers[cnt] ,target, numbers)
def solution(numbers, target):
global answer
max_len = len(numbers)
dfs(max_len, 0, 0, target, numbers)
return answer