[νλ‘κ·Έλλ¨Έμ€ | Python] νκ² λλ²
π λ¬Έμ μ 보
- κ΄λ ¨ κ°λ : BFS, DFS
- λμ΄λ : Level 2
- λ¬Έμ λ§ν¬ : https://programmers.co.kr/learn/courses/30/lessons/43165
μ½λ©ν μ€νΈ μ°μ΅ - νκ² λλ²
nκ°μ μμ΄ μλ μ μλ€μ΄ μμ΅λλ€. μ΄ μ μλ€μ μμλ₯Ό λ°κΎΈμ§ μκ³ μ μ ν λνκ±°λ λΉΌμ νκ² λλ²λ₯Ό λ§λ€λ €κ³ ν©λλ€. μλ₯Ό λ€μ΄ [1, 1, 1, 1, 1]λ‘ μ«μ 3μ λ§λ€λ €λ©΄ λ€μ λ€μ― λ°©λ²μ μΈ μ
programmers.co.kr
π λ¬Έμ μ€λͺ
λ¬Έμ μ€λͺ
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 μ΄νμΈ μμ°μμ λλ€.
μ μΆλ ₯ μ
numbers | target | return |
[1, 1, 1, 1, 1] | 3 | 5 |
[4, 1, 2, 1] | 4 | 2 |
μ μΆλ ₯ μ μ€λͺ
μ μΆλ ₯ μ #1
λ¬Έμ μμμ κ°μ΅λλ€.
μ μΆλ ₯ μ #2
+4+1-2+1 = 4
+4-1+2-1 = 4
- μ΄ 2κ°μ§ λ°©λ²μ΄ μμΌλ―λ‘, 2λ₯Ό return ν©λλ€.
π λ¬Έμ νμ΄
λ°©λ² 1.BFS νμ©
BFSλ₯Ό νμ©ν νμ΄μ΄λ€. μ΄μ€ forλ¬Έμ νμ©νμ¬ parent λ Έλμ κ·Έ μμ λ Έλμ ν©/μ°¨ κ΄κ³λ₯Ό ꡬννλ€.
def solution(numbers, target):
cnt = 0
nodes = [0]
for node in numbers:
temp = []
for parent in nodes: # λΆλͺ¨λ
Έλ +- λ€μ μμ
temp.append(parent + node)
temp.append(parent - node)
nodes = temp
for leaf in nodes: # 리νλ
Έλ μ€ νκ²λλ² μ°ΎκΈ°
if leaf == target:
cnt += 1
return cnt
λ°©λ² 2. DFS νμ©
μ¬κ·λ₯Ό ν΅ν΄ λ°λ³΅λ¬Έ μμ΄λ κ³Όμ μ λ°λ³΅ν μ μλ€.
1.depth == len(numbers)μΌ λ : sum(numbers) == targetμ΄λ©΄ 1μ returnνκ³ , κ·Έ 1μ answerμ λν΄μ€λ€.
2.depth != len(numbers) μΌ λμλ, numbers[depth]μ΄ μμμΌ λ ν λ² DFS()ν¨μλ₯Ό λλ¦¬κ³ , μμμΌ λ ν λ² λ λλ¦°λ€.
def solution(numbers, target):
answer = DFS(numbers, target, 0)
return answer
def DFS(numbers, target, depth):
answer = 0
if depth == len(numbers): # 리νλ
Έλμμ
if sum(numbers) == target: # νκ² λλ²μ΄λ©΄ 1,
return 1 # μλλ©΄ 0μ 리ν΄νλ€.
else: return 0
else:
answer += DFS(numbers, target, depth+1)
numbers[depth] *= -1
answer += DFS(numbers, target, depth+1)
return answer
π‘ What I learned

κΉμ΄ μ°μ νμ(DFS)
κΉμ΄ μ°μ νμ DFSλ κ° μ μλ λ§νΌ μ΅λν κΉμ΄ κ°κ³ , λ μ΄μ κ° κ³³μ΄ μλ€λ©΄ μ΄μ μ μ μΌλ‘ λμκ°λ λ°©μμΌλ‘ κ·Έλνλ₯Ό μννλ λ°©μ
λμ΄ μ°μ νμ(BFS)
λμ΄ μ°μ νμ BFSλ μμμ μ μ λ°©λ¬Έν ν μμ μ μ μ μΈμ ν λͺ¨λ μ μ μ λ°©λ¬Έν ν μμ μ μ μ μΈμ ν λͺ¨λ μ μ λ€μ μ°μ λ°©λ¬Ένλ λ°©λ²
BFS, DFSλ₯Ό μ€μ λ¬Έμ νμ΄μμ²μ μ μ©ν΄λ³΄μλ€. μμ§μ λ λ€ μ΅μνμ§λ μκ³ , queueλ stack, μ¬κ·λ₯Ό νμ©νλ λ²μ μμ§ μμ μ΅μ§ μμμΌλ μμΌλ‘ κ³μ νμ΄λ³΄λ©° μμ μ΅νμΌκ² λ€.