문제 설명 및 제한사항
아이디어 및 해결 방법
코드
from queue import deque
def bfs(r, c, place):
q = deque()
d = 0
q.append((r, c, d))
vis = {(r, c)}
while len(q) > 0:
r, c, d = q.popleft()
if d == 3:
break
if place[r][c] == 'P' and d != 0:
return True
for dr, dc in [[0, 1], [0, -1], [1, 0], [-1, 0]]:
if 0 <= (nr := r+dr) < len(place) and 0 <= (nc := c+dc) < len(place[0]):
if (nr, nc) in vis or place[nr][nc] == 'X':
continue
q.append((nr, nc, d+1))
vis.add((nr, nc))
return False
def solve(place):
for r, row in enumerate(place):
for c, char in enumerate(row):
if char == 'P':
if bfs(r, c, place):
return 0
return 1
def solution(places):
answer = [solve(place) for place in places]
return answer
Python
복사
출처
프로그래머스 코딩테스트 연습 https://school.programmers.co.kr/learn/challenges