Algorithm/νλ‘κ·Έλλ¨Έμ€
[νλ‘κ·Έλλ¨Έμ€ / Python] νκ² λλ²
meeeeejin
2021. 3. 15. 21:34
λ¬Έμ λ§ν¬: programmers.co.kr/learn/courses/30/lessons/43165
λ¬Έμ μ€λͺ
λͺ¨λ κ²½μ°μ μλ₯Ό DFS(κΉμ΄ μ°μ νμ)μΌλ‘ νμΈν΄μ νκ² λλ²λ₯Ό λ§λλ κ²½μ°λ₯Ό μ μ΅λλ€.
μμ€μ½λ
answer = 0
def dfs(idx, numbers, total_sum, target):
global answer
n = len(numbers)
# λ§μ§λ§ μμκΉμ§ κ³μ°νλ€λ©΄ return
if idx == n - 1:
# νκ² λλ²λ₯Ό λ§λλ κ²½μ°
if total_sum == target:
answer += 1
return
# λ€μ μμλ₯Ό λν κ²½μ°
dfs(idx + 1, numbers, total_sum + numbers[idx + 1], target)
# λ€μ μμλ₯Ό λΊ κ²½μ°
dfs(idx + 1, numbers, total_sum - numbers[idx + 1], target)
def solution(numbers, target):
global answer
dfs(-1, numbers, 0, target)
return answer
λ€λ₯Έ μ¬λμ νμ΄
β μ¬κ·λ₯Ό μ΄μ©ν νμ΄
μλ₯Ό λ€μ΄ numbers = [1, 2, 3, 4, 5], target = 6 μΌ κ²½μ°λ₯Ό μκ°ν΄λ΄ μλ€.
λ§μ½ [2, 3, 4, 5]λ‘ 5 λλ 7μ λ§λ€ μ μλ€λ©΄, 1μ λνκ±°λ λΉΌμ νκ² λλ²μΈ 6μ λ§λ€ μ μμ΅λλ€.
μ΄μ κ°μ μμ΄λμ΄λ‘ μ¬κ· ν¨μλ₯Ό μ΄μ©ν νμ΄λ λ€μκ³Ό κ°μ΅λλ€.
def solution(numbers, target):
# numbersλ‘ targetμ λ§λ€ μ μλ κ²½μ°
if not numbers and target == 0 :
return 1
# numbersλ‘ targetμ λ§λ€ μ μλ κ²½μ°
elif not numbers:
return 0
else:
# 리μ€νΈμ μ μμλΆν° μμλλ‘
# (ν΄λΉ μμλ₯Ό λνμ λμ μ λ΅ κ°μ) + (ν΄λΉ μμλ₯Ό λΊμ λμ μ λ΅ κ°μ)
return solution(numbers[1:], target-numbers[0]) + solution(numbers[1:], target+numbers[0])
β productλ₯Ό μ΄μ©ν μμ νμ νμ΄
from itertools import product
def solution(numbers, target):
_list = [(x, -x) for x in numbers]
s = list(map(sum, product(*_list)))
return s.count(target)
728x90