https://www.acmicpc.net/problem/12851
μμ΄λμ΄
1. bfs
- μ΄λ―Έ μ¨λ°κΌμ§ 1κ³Ό 3μ νμ΄μ λμΆ© μκ³ μλ€. x - 1, x + 1, x * 2 νμ λ£μ΄μ£Όλ©΄μ νμνλ©΄ λ¨.
- κ²½μ°μ μλ₯Ό μ΄λ»κ² ꡬν μ§ μκ°λ§ νλ©΄ λλ€.
2. κ²½μ°μ μ
- μ νμμ νλ€κ° 맨 μ²μ λμνν λμ°©ν μκ°μ μ μ₯νκ³
- μ΄ν λμνν λμ°©νμ λ μ μ₯ν΄λ μκ°κ³Ό κ°λ€λ©΄ κ²½μ°μ μλ₯Ό +1 ν΄μ€λ€.
μ 체 μ½λ
from collections import deque
N, K = map(int,input().split())
visited = [0] * 200001
def bfs(n):
ans_count = 100001
ans_way = 0
deq = deque()
deq.append([n, 0])
visited[n] = 0
while deq:
x, count = deq.popleft()
if count > ans_count:
continue
if x == K:
if ans_count == 100001:
ans_count = count
if count == ans_count:
ans_way += 1
arr = [x - 1, x + 1, x * 2]
for a in arr:
if 0 <= a <= 200000 and (visited[a] == 0 or visited[a] == count + 1):
visited[a] = count + 1
deq.append([a,count + 1])
return ans_count, ans_way
for ans in bfs(N):
print(ans)
μ½λ μ€λͺ
def bfs(n):
ans_count = 100001
ans_way = 0
deq = deque()
deq.append([n, 0])
visited[n] = 0
while deq:
x, count = deq.popleft()
if count > ans_count:
continue
if x == K:
if ans_count == 100001:
ans_count = count
if count == ans_count:
ans_way += 1
arr = [x - 1, x + 1, x * 2]
for a in arr:
if 0 <= a <= 200000 and (visited[a] == 0 or visited[a] == count + 1):
visited[a] = count + 1
deq.append([a,count + 1])
return ans_count, ans_way
λ¨Όμ λ°©λ²μ μλ₯Ό μ μ₯ν ans_wayλ³μμ μ΅λ¨ μκ°μ μ μ₯ν ans_countλ₯Ό μ μΈν΄μ€λ€.
ans_countλ 100000 0 μ λ ₯μ΄ λ€μ΄μμ λ λμ€λ μκ°(100000) λ³΄λ€ ν¬κ² μ€μ (100001)
κ·Έλ¦¬κ³ visited리μ€νΈλ₯Ό boolean 리μ€νΈκ° μλ int 리μ€νΈλ‘ μ μΈνλ€. λμ€μ μ¬μ©ν¨.
κΈ°λ³Έμ μΈ νμ κ°λ¨νλ€.
νμ x + 1, x - 1, x * 2κ° μ‘°κ±΄μ μΆ©μ‘±νλ©΄ νμ λ£κ³ νμνλ λ°©λ²μ΄λ€.
μ£Όμ΄μ§ λ²μμμ λ°©λ¬Έμ νμ§ μμκ±°λ, μλλ©΄ κ·Έ μμΉμ μ΅λ¨μκ°μΌλ‘ λ°©λ¬Έν κ²½μ° νμ μΆκ°ν΄μ€λ€.
μ λ°©λ¬Έ μ λ¬΄λ§ λ°μ§λ κ² μλλλ©΄, μλ₯Ό λ€μ΄ 1 3μΌλ‘ μ λ ₯μ΄ λ€μ΄μλ€κ³ μΉλ©΄
1 2 3(+1 +1)
1 2 3(*2 +1)
μ΄λ κ² μ΄ 2κ°μ§ κ²½μ°κ° λμ¨λ€. *2μ +1 μ λ€λ₯Έ κ²½μ°μ΄λ―λ‘ μ΄λ₯Ό ꡬλΆν΄μ€μΌ ν¨.
νμμ νλ€ λ³΄λ©΄ μ΅μ΄λ‘ λμμκ² λμ°©νλ κ²½μ°κ° μκΈΈ κ±°λ€.
κ·ΈλΌ μ΄λ(if x == K μΌ λ) ans_countμ κ°μ μ λ°μ΄νΈνκ³ ans_wayκ°μ 1 μ¦κ°μμΌμ€λ€.
μ΄νμλ ans_count κ°μ΄ countμ κ°μΌλ©΄ ans_wayκ°μ 1 μ¦κ°μμΌμ€λ€.
μ΄ λ¬Έμ λ₯Ό νλ©΄μ μ λ§ λ§μ΄ νλ Έλ€. νλ©΄μ λλ 건 μ£μ§ μΌμ΄μ€λ 무쑰건 ν΄λ³΄κ³ μ μΆνκΈ°.
'𧩠Problem Solving > [λ°±μ€]' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€] 1202 보μ λλ (python νμ΄μ¬) (0) | 2022.07.11 |
---|---|
[λ°±μ€] 13913 μ¨λ°κΌμ§ 4 (python νμ΄μ¬) (0) | 2022.07.10 |
[λ°±μ€] 1043 κ±°μ§λ§ (python νμ΄μ¬) (0) | 2022.07.09 |
[λ°±μ€] 2467 μ©μ‘ (python νμ΄μ¬) (0) | 2022.07.09 |
[λ°±μ€] 6064 μΉ΄μ λ¬λ ₯ (python νμ΄μ¬) (0) | 2022.07.06 |