μκ³ λ¦¬μ¦ π‘/νλ‘κ·Έλλ¨Έμ€
κΉμ΄/λλΉ μ°μ νμ(DFS/BFS)_νκ² λλ².py(νμ΄μ¬)
@ENFJ
2024. 10. 1. 17:11
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