Search
Duplicate

거리두기 확인하기

문제 설명 및 제한사항

아이디어 및 해결 방법

코드

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