๐ค ํ์ด ์ฝ๋
from collections import deque
def bfs(start, place):
queue = deque()
queue.append([start[0], start[1], 0])
visited = [[False for _ in range(5)] for _ in range(5)]
visited[start[0]][start[1]] = True
dx = [0, 0, -1, 1]
dy = [1, -1, 0, 0]
candidate = []
while queue:
a, b, dist = queue.popleft()
for i in range(4):
nx = dx[i] + a
ny = dy[i] + b
if 0 <= nx < 5 and 0 <= ny < 5 and not visited[nx][ny] and place[nx][ny] != "X":
visited[nx][ny] = True
queue.append([nx, ny, dist + 1])
if place[nx][ny] == "P":
candidate.append(dist + 1)
return True if candidate and min(candidate) <= 2 else False
def check_distance(place):
for i in range(5):
for j in range(5):
if place[i][j] == "P":
if bfs([i, j], place):
return 0
return 1
def solution(places):
answer = []
for place in places:
answer.append(check_distance(place))
return answer
๐ค ๋ฌธ์ ํ์ด
์ ์ฒด 2์ฐจ์ ๋ฐฐ์ด์ ๊ฐ๋ก ์ธ๋ก์ ๊ธธ์ด๊ฐ 5๋ฐ์ ๋์ง ์์ผ๋, ๋ชจ๋ ์ฌ๋์ ๋ํด์ ๋งจํดํผ ๊ฑฐ๋ฆฌ๊ฐ 2 ์ดํ์ธ ์ฃผ๋ณ์ฌ๋์ด ์๋์ง ๊ณ์ฐํด์ฃผ๋ฉด ๋ฉ๋๋ค.
์ฃผ๋ณ์ฌ๋์ ๊ฑฐ๋ฆฌ๋ BFS๋ก ํ์ดํ์ต๋๋ค.
์ํ์ข์ฐ ๋ฐฉํฅ์ผ๋ก ๋ฒ์๋ฅผ ์ด๊ณผํ์ง ์๊ณ , ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ์ง์ญ์ด๋ฉฐ, ํ๋ ์ดํธ๋ก ๋งํ์ง ์์ ๋ถ๋ถ์ ๋ํด์ ๋ฐฉ๋ฌธ์ ํ๊ณ ,
"O"์ฒ๋ผ ๋น ํ ์ด๋ธ์ด๋ฉด ๊ทธ๋ฅ ์ง๋๊ฐ๊ณ , "P"๋ก ์ฌ๋์ ๋ง๋ฌ๋ค๋ฉด, ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ฅํฉ๋๋ค.
๋ชจ๋ while๋ฌธ์ด ๋๋๋ฉด, candidate ๋ฐฐ์ด์๋ ์์ ์ง์ ์ผ๋ก๋ถํฐ ๋ชจ๋ ์ฌ๋๊ณผ์ ๊ฑฐ๋ฆฌ๊ฐ ์ ์ฅ๋์ด์๊ณ , ์ด ์ค ์ต์๊ฐ์ ๊ธฐ์ค์ผ๋ก 2์ดํ๋ผ๋ฉด ๊ฑฐ๋ฆฌ๋๊ธฐ๋ฅผ ์งํค์ง ์์ ๊ฒ์ผ๋ก ๋ก์ง์ ์ค๊ณํ์ต๋๋ค.
'๐ ์ฝ๋ฉํ ์คํธ ๋๋น : PS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] ์ ๊ตญ์ฌ์ฌ (level3, python) (0) | 2023.04.14 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] ๋ฉ์ฉกํ ์ฌ๊ฐํ (level2, python) (0) | 2023.04.11 |
[ํ๋ก๊ทธ๋๋จธ์ค] ์ฌํ๊ฒฝ๋ก (level3, python) (1) | 2023.04.11 |
[ํ๋ก๊ทธ๋๋จธ์ค] ๋์คํฌ ์ปจํธ๋กค๋ฌ (level3, python) (0) | 2023.04.10 |
[ํ๋ก๊ทธ๋๋จธ์ค] ์ ๋ ฅ๋ง์ ๋๋ก ๋๋๊ธฐ (level2, python) (0) | 2023.04.10 |