[μ€μννΈ μκ³ λ¦¬μ¦] νλ‘κ·Έλλ¨Έμ€: νκ² λλ²
λ¬Έμ
λ¬Έμ μ€λͺ
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 ν¨μλ₯Ό μμ±ν΄μ£ΌμΈμ.
μ νμ¬ν
- μ£Όμ΄μ§λ μ«μμ κ°μλ 2κ° μ΄μ 20κ° μ΄νμ λλ€.
- κ° μ«μλ 1 μ΄μ 50 μ΄νμΈ μμ°μμ λλ€.
- νκ² λλ²λ 1 μ΄μ 1000 μ΄νμΈ μμ°μμ λλ€.
νμ΄
dfs λ‘ νλ² κΉμ΄κ° λ΄λ €κ° λλ§λ€ μ«μλ₯Ό λΉΌλ κ²½μ°, μ«μλ₯Ό λνλ κ²½μ°λ₯Ό μλ‘μ΄ μ¬κ·λ‘ λ§λ€μ΄μ€λλ€. λ°νΈλ κ°μ μμ±λ κ°μ΄ νκ² λλ²κ° λλμ§ νμΈνμ¬ λ§μΌλ©΄ 1 , μλλ©΄ 0μ λ°νν©λλ€. μ΄λ₯Ό λͺ¨λ λνλ©΄ νκ²λλ²λ₯Ό λ§λ€ μ μλ λͺ¨λ κ²½μ°μ μλ₯Ό μ μ μμ΅λλ€.
μ½λ
import Foundation
func dfs(_ index : Int, _ numbers : inout [Int], _ sum : Int, _ target : Int) -> Int{
if index == numbers.count {
return sum == target ? 1 : 0
}
return dfs(index + 1, &numbers, sum + numbers[index], target)
+ dfs(index + 1, &numbers, sum - numbers[index], target)
}
func solution(_ numbers:[Int], _ target:Int) -> Int {
var nums = numbers
return dfs(0, &nums, 0, target)
}