DFS ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ํ์ํ๋ฉฐ, ๊ฐ ์ซ์๋ฅผ ๋ํ๊ฑฐ๋ ๋นผ๋ ๋ ๊ฐ์ง ์ ํ์ ์ฌ๊ท์ ์ผ๋ก ์ํํฉ๋๋ค.
ํ์ด ๊ณผ์ :
1. ๊ฐ ์ซ์๋ฅผ ์์ฐจ์ ์ผ๋ก ์ ํํ์ฌ, ๋ํ๋ ๊ฒฝ์ฐ์ ๋นผ๋ ๊ฒฝ์ฐ๋ฅผ ๋ชจ๋ ํ์ํ๋ค.
2. ๋ชจ๋ ์ซ์์ ๋ํด ์ฐ์ฐ์ ๋ง์ณค์ ๋, ๊ฒฐ๊ณผ๊ฐ์ด ํ๊ฒ ๋๋ฒ์ ๊ฐ์ผ๋ฉด ๋ฐฉ๋ฒ์ ์๋ฅผ 1 ์ฆ๊ฐ ์ํต๋๋ค.
3. ์ต์ข ์ ์ผ๋ก ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ํ์ํ ํ, ๋ฐฉ๋ฒ์ ์๋ฅผ ๋ฐํํฉ๋๋ค.
def solution(numbers, target):
answer = 0 # ํ์ผ ๋๋ฒ๋ฅผ ๋ง๋ค ์ ์๋ ๋ฐฉ๋ฒ์ ์๋ฅผ ์ ์ฅํ๋ ๋ณ์
# dfs ํจ์๋ ํ์ฌ ์ซ์์ ์ธ๋ฑ์ค(index)์ ํ์ฌ๊น์ง์ ํฉ(current_sum)์ ๋ฐ์ ์ฌ๊ท์ ์ผ๋ก ํธ์ถ๋ฉ๋๋ค.
def dfs(index, current_sum):
# nonlocal answer ์ ๋ด๋ถํจ์์ธ dfs์์ ๋ฐ๊นฅ ํจ์์ ๋ณ์ answer๋ฅผ ์์ ํ ์ ์๊ฒ ํด์ค.
# ์ด๊ฒ ์์ผ๋ฉด answer๋ ํจ์ ๋ด๋ถ์์ ๋ก์ปฌ ๋ณ์๋ก ์ธ์๋ฉ๋๋ค.
nonlocal answer
# ๋ชจ๋ ์ซ์๋ฅผ ์ฒ๋ฆฌํ ๊ฒฝ์ฐ
#**if index == len(numbers):**๋ ํ์ฌ index๊ฐ numbers ๋ฐฐ์ด์ ๋์ ๋๋ฌํ๋์ง ํ์ธํฉ๋๋ค.
# ๋ฐฐ์ด์ ๋ชจ๋ ์ซ์๋ฅผ ๋ค ์ฒ๋ฆฌํ๋ค๋ ์๋ฏธ์
๋๋ค.
if index == len(numbers):
if current_sum == target:
answer += 1
# ๊ทธ ํ์๋ **return**์ผ๋ก ํจ์๊ฐ ์ข
๋ฃ๋ฉ๋๋ค. ๋ ์ด์ ๊ณ์ฐํ ์ซ์๊ฐ ์๊ธฐ ๋๋ฌธ์
๋๋ค.
return
# ํ์ฌ ์ซ์๋ฅผ ๋ํ๋ ๊ฒฝ์ฐ
dfs(index + 1, current_sum + numbers[index])
# ํ์ฌ ์ซ์๋ฅผ ๋นผ๋ ๊ฒฝ์ฐ
dfs(index +1,current_sum - numbers[index])
# ํ์ ์์
#์ด๊ธฐ ํธ์ถ: ์ฒซ ๋ฒ์งธ ์ซ์๋ถํฐ ํ์์ ์์ํด์ผ ํ๋ฏ๋ก dfs(0, 0)์ ํธ์ถํฉ๋๋ค. ์ฌ๊ธฐ์ 0์ ์ฒ์ ์ธ๋ฑ์ค์ด๊ณ , ๋ ๋ฒ์งธ 0์ ํ์ฌ ํฉ๊ณ์
๋๋ค.
# ์ฆ, ์๋ฌด ์ซ์๋ ์์ง ๋ํ๊ฑฐ๋ ๋นผ์ง ์์ ์ํ์์ ์์ํฉ๋๋ค.
dfs(0, 0)
#๋ชจ๋ ํ์์ด ์๋ฃ๋๋ฉด, answer ๊ฐ(ํ๊ฒ ๋๋ฒ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์)์ ๋ฐํํฉ๋๋ค.
return answer
numbers = [1, 1, 1, 1, 1]
target = 3
result = solution(numbers, target)
print(result) # ์ถ๋ ฅ: 5
'์๊ณ ๋ฆฌ์ฆ ๐ก > ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] ํ์ vs ์ง์ (ํ์ด์ฌ ํ์ด) (0) | 2024.10.20 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค]๊ฒ์ ๋งต ์ต๋จ๊ฑฐ๋ฆฌ.py (BFS) (2) | 2024.10.01 |
์กฐ์ด์คํฑ Greedy (1) | 2024.09.01 |
ํ์๋ฒ(Greedy) ์ฒด์ก๋ณต (1) | 2024.08.31 |
[ํ๋ก๊ทธ๋๋จธ์ค] ์์ ์ฐพ๊ธฐ _ ํ์ด์ฌ (1) | 2024.06.16 |