π‘ 쑰건 λ° νμ΄
- λκΈ°μ€μ μμμλ€μ΄ λ©΄μ μ μν΄ λκΈ°λ₯Ό νκ³ μλ€. λκΈ°μ€μ μλ λκΈ°μλ€μ΄ 거리 λκΈ°λ₯Ό μ μ§ν€κ³ μμκΉ?
- λκΈ°μ€μ 5κ°, κ° λκΈ°μ€μ
5 * 5
μ ν¬κΈ°μ
λλ€.
- μμμλ€ κ°μ 거리λ 맨ν΄νΌ 거리λ 2 μ΄νλ‘ μμ μ μμΌλ 3 μ΄μμ΄μ΄μΌνλ€.
- 맨ν΄νΌ κ±°λ¦¬κ° 2μ΄νμ¬λ μμμ μ¬μ΄μ νν°μ
μΌλ‘ λ§ν μμΌλ©° μ§λκ° λ€λ₯Έ λ°©λ²μΌλ‘ μμμλ‘μ κ²½λ‘κ° μλ€λ©΄ μκ΄μ΄ μλ€.
- BFS μ νμ λ¬Έμ
- λ ν
μ΄λΈ
T1, T2
κ° νλ ¬ (r1, c1), (r2, c2)
μ κ°κ° μμΉνκ³ μλ€λ©΄,
T1, T2
μ¬μ΄μ 맨ν΄νΌ 거리λ |r1 - r2| + |c1 - c2|
- μμμ, ν
μ΄λΈ, νν°μ
=
P
, O
, X
- μ νμ± ν
μ€νΈμ μκ°μ 10μ΄.
π₯ μμ€ μ½λ
from collections import deque
dx, dy = [1, -1, 0, 0], [0, 0, -1, 1]
def bfs(board, now, goal, dist):
q = deque()
visited = []
x, y = now
q.append((0, x, y, []))
visited.append(now)
check = False
while q:
cost, x, y, visit = q.popleft()
# μμ§μΈ κ±°λ¦¬κ° λ§¨ν€νΌ κ±°λ¦¬λ³΄λ€ λ§μΌλ©΄ λμ΄κ°κΈ°
if cost > dist:
continue
if (x, y) == goal:
for i, j in visit:
if board[i][j] == 'X':
check = True
elif board[i][j] == 'O':
return False
for i in range(4):
nx, ny = dx[i] + x, y + dy[i]
if -1 < nx < 5 and -1 < ny < 5:
if (nx, ny) not in visited:
# λͺ©ν μ§μ μ visited μ λ£μ§ μλλ€.
# κ°λ₯ν λ§μ κ²½λ‘λ₯Ό μΌλμ λμ΄ κ³μ°νλ€.
if (nx, ny) != goal:
visited.append((nx, ny))
temp = visit[:]
temp.append((nx, ny))
q.append((cost + 1, nx, ny, temp))
return check
def solution(places):
answer = []
for i in range(len(places)):
board = []
data = places[i]
ps = []
# λκΈ°μ€ λ¦¬μ€νΈ λ§λ€κΈ°
for j in range(5):
for k in range(5):
if data[j][k] == 'P':
ps.append((j, k))
board.append(list(data[j]))
ps.sort()
check = True
for j in range(len(ps)):
x1, y1 = ps[j]
for k in range(j + 1, len(ps)):
x2, y2 = ps[k]
dist = abs(x1 - x2) + abs(y1 - y2)
if dist < 3:
if not bfs(board, ps[j], ps[k], dist):
check = False
break
if not check:
break
answer.append(1) if check else answer.append(0)
return answer
π μμ λ° μ€νκ²°κ³Ό
μμ
places = [["POOOP", "OXXOX", "OPXPX", "OOXOX", "POXXP"], ["POOPX", "OXPXP", "PXXXO", "OXXXO", "OOOPP"], ["PXOPX", "OXOXP", "OXPOX", "OXXOP", "PXPOX"], ["OOOXX", "XOOOX", "OOOXX", "OXOOX", "OOOOO"], ["PXPXP", "XPXPX", "PXPXP", "XPXPX", "PXPXP"]]
μ€νκ²°κ³Ό
[1, 0, 1, 1, 1]
β¨οΈ λ¬Έμ νμ΄
- μ νμ± ν
μ€νΈκ° μκΈ° λλ¬Έμ μκ°μ΄κ³Ό λ° λ©λͺ¨λ¦¬ μ΄κ³Όμ μ κ²½μ μ¨μΌνλ€.
κ·Έλ¬λ―λ‘ μμμλ€μ μ’νλ§ λ°λ‘ λ°°μ΄λ‘ λ°μμ 맨ν΄νΌ 거리λ₯Ό ꡬν λ€ λ§¨ν΄νΌ κ±°λ¦¬κ° 2 μ΄νμΈ κ²λ€λ§ BFSλ₯Ό ν΅ν΄
μμμ μ¬μ΄κ° νν°μ
μΌλ‘ λ§ν μλμ§ νμΈνλ€.
- λκΈ°μ€μ BFSλ‘ λλ©΄μ νμ
μ΄λ 거리, μ’ν, μμ§μΈ μ΄λ μ’ν
λ₯Ό λ°°μ΄λ‘ λ£μ΄ μ£Όλ©°,
μ΄λ κ±°λ¦¬κ° λ§¨ν΄νΌ κ±°λ¦¬λ³΄λ€ λ©λ€λ©΄ BFS κ³Όμ μ skip νλ€.
- λ μμμμ 맨ν΄νΌ κ±°λ¦¬κ° 2 μ΄νμΌ λ, μ¬μ΄μ νν°μ
μ΄ μλ κ²½μ°λ₯Ό μ²λ¦¬ νμ§ λͺ»ν΄μ ν
μ€νΈ μΌμ΄μ€ 5λ²μ΄ νλ Έλ€.
λ΄κ° νλ¦° λ°λ‘λ μλμ κ°λ€. λ΅μ 1μ΄λ€.
[["OPXPO", "OOOOO", "OOOOO", "OOOOO", "OOOOO"]]
πΎ λλμ
- μ΄μ νμλ λΆ! λ³΄λ€ μ¬μ λ€.
- λ°λ‘ ν
μ€νΈ μΌμ΄μ€λ₯Ό μ°Ύλλ° μ‘°κΈ μ΄λ €μμ΄ μμλ€.
- BFSλ μ§κΈ° λλ¦μΈ κ² κ°λ€. queue μ λ£λ μ 보λ₯Ό λ€μνκ² μ¬μ©νλ λ²μ΄ μ΅μν΄μ§κ³ μλ κ² κ°μ μ’λ€.
κ·Έλ¬λ visited λ°°μ΄μ λ λ€μνκ² μ¬μ©νλ λ²μ μ°μ΅ν΄μΌκ² λ€.