μλ£κ΅¬μ‘°/πμκ³ λ¦¬μ¦ - 19
μ€λ λ€μ κ°μ λͺ©λ‘
- dfs
- 그리λ - 1
DFS(κΉμ΄ μ°μ νμ)
dfsλ νμͺ½ λ°©ν₯μΌλ‘ κΉκ² νμνκ³ ,
λκΉμ§ κ° νμ λ€μ μ΄μ λ
Έλλ‘ λμκ°μ ν΄λΉ λ
Έλμ λ€λ₯Έ μμμ λκΉμ§ νμνλ κ²μ κ³μν΄μ λ°λ³΅νλ€.
λ°λΌμ, bfsμλ λ€λ₯΄κ² stackλ₯Ό μ¬μ©νλ€.
DFS ꡬν
μ κ·Έλνλ₯Ό ꡬννκ³ , dfs μμλ μ‘°κΈ λ€λ₯΄λ€.(μ€λ₯Έμͺ½λΆν° μμ)
def DFS(graph, start):
visited = {node : False for node in graph}
s = [start]
visited[start] = True
while s:
cur_node = s.pop()
print(cur_node)
for node in graph[cur_node]:
if not visited[node]:
visited[node] = True
s.append(node)
print("next : ", end="")
for e in s:
print(e, end=" ")
print()
DFS(graph, 'A')
μ μ½λλ BFSμ½λμμ νλ§ μ€νμΌλ‘ λ°κΎΌ μ½λλ€.
μ κ·Έλ¦Όμμ nextλ μ€νμ μλ―Ένλ€.
Aμμ νμμ μμν κ²μ΄κΈ°μ μ€νμ Aμ½μ νκ³ μμνκ² λ€. μ€ν : A
μ€νμμ νμ ν΅ν΄ μ»μ λ Έλ Aμ μΈμ λ Έλλ€μ μ€νμ λ£μΌλ©΄, μ€ν : B, C
μ€νμμ νμ ν΅ν΄ μ»μ λ Έλ Cμ μΈμ λ Έλλ€μ μ€νμ λ£μΌλ©΄, μ€ν : B, G, H, I
μ€νμμ νμ ν΅ν΄ μ»μ λ Έλ Iμ μΈμ λ Έλλ€μ μ€νμ λ£μΌλ©΄, μ€ν : B, G, H, J
μ€νμμ νμ ν΅ν΄ μ»μ λ Έλ Jμ μΈμ λ Έλλ€μ μ€νμ λ£μΌλ©΄, μ€ν : B, G, H
μ€νμμ νμ ν΅ν΄ μ»μ λ Έλ Hμ μΈμ λ Έλλ€μ μ€νμ λ£μΌλ©΄, μ€ν : B, G
μ€νμμ νμ ν΅ν΄ μ»μ λ Έλ Gμ μΈμ λ Έλλ€μ μ€νμ λ£μΌλ©΄, μ€ν : B
μ€νμμ νμ ν΅ν΄ μ»μ λ Έλ Bμ μΈμ λ Έλλ€μ μ€νμ λ£μΌλ©΄, μ€ν : D
μ€νμμ νμ ν΅ν΄ μ»μ λ Έλ Dμ μΈμ λ Έλλ€μ μ€νμ λ£μΌλ©΄, μ€ν : E, F
μ€νμμ νμ ν΅ν΄ μ»μ λ Έλ Fμ μΈμ λ Έλλ€μ μ€νμ λ£μΌλ©΄, μ€ν : E
μ€νμμ νμ ν΅ν΄ μ»μ λ Έλ Eμ μΈμ λ Έλλ€μ μ€νμ λ£μΌλ©΄, μ€ν :
μ€νμ΄ λΉμμΌλ―λ‘ μ’ λ£.
그리λ(Greedy algorithm, νμ μκ³ λ¦¬μ¦)
μ΅μ μ ν΄μ κ°κΉμ΄ κ°μ ꡬνκΈ° μν¨
맀μκ° ν΄λ₯Ό μ νν΄μΌ ν λλ§λ€, μ΅μ μ ν΄λ₯Ό κ³ λ₯΄λ λ°©μμ΄λ€.
맀 μκ° μ£Όμ΄μ§λ μ νμ§λ€ μ€ κ°μ₯ μ’μ μ νμ§λ₯Ό κ³ λ₯Έλ€.
λμ λ¬Έμ
μ§λΆν΄μΌνλ κ°μ΄ 7230μ μΌ λ, 1μ 50μ 100μ 500μ λμ μΌλ‘ λμ μ μκ° κ°μ₯ μ λλ‘ μ§λΆνλ λ°©λ²
- λμ μ μκ° κ°μ₯ μ κ² νκΈ° μν΄μλ β맀 μκ° μ§λΆν μ μλ λμ λ€ μ€ κ°μ₯ ν° κ°μ κ°μ§ λμ μΌλ‘ μ§λΆβνλ©΄ λλ€.
def coin(cost, values):
values.sort()
values.reverse()
cnt = 0
for value in values:
cnt += cost // value
cost = cost % value
return cnt
coin(4720, [500, 100, 50, 1])
- μ¬μ© κ°λ₯ν λμ λ€ μ€ κ°μ₯ ν° κ°λΆν° μ ν
- μ νν λμ μΌλ‘ μ΅λν μ§λΆ
λκΈλ¨κΈ°κΈ°