๐ก ์กฐ๊ฑด ๋ฐ ํ์ด
- ๋๊ธฐ์ค์ ์์์๋ค์ด ๋ฉด์ ์ ์ํด ๋๊ธฐ๋ฅผ ํ๊ณ ์๋ค. ๋๊ธฐ์ค์ ์๋ ๋๊ธฐ์๋ค์ด ๊ฑฐ๋ฆฌ ๋๊ธฐ๋ฅผ ์ ์งํค๊ณ ์์๊น?
- ๋๊ธฐ์ค์ 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:
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 ๋ฐฐ์ด์ ๋ ๋ค์ํ๊ฒ ์ฌ์ฉํ๋ ๋ฒ์ ์ฐ์ตํด์ผ๊ฒ ๋ค.