풀이 과정
참가자들이 어디에 있는지 위치를 모두 저장
각각의 참가자 기준으로 bfs를 진행
- 현재 위치 기준 거리 2 이내에 사람이 있는지 검사.
- 칸막이가 있다면 그방향은 방문 x
참가자들중 한명이라도 실패하면 0, 모두 성공하면 1 저장
from collections import deque
def check(place, x, y):
dx = [-1, 1, 0, 0]
dy = [0, 0, 1, -1]
queue = deque()
queue.append([x, y, 0])
visited = set()
visited.add(tuple([x, y]))
while queue:
a, b, c = queue.popleft()
if c == 2:
continue
for i in range(4):
nx = a + dx[i]
ny = b + dy[i]
if nx >= 0 and nx <= len(place)-1 and ny >= 0 and ny <= len(place[0])-1:
if tuple([nx, ny]) not in visited:
visited.add(tuple([nx, ny]))
if place[nx][ny] == 'P':
return False
if place[nx][ny] == 'X':
continue
queue.append([nx, ny, c+1])
return True
def solution(places):
answer = []
for place in places:
people = []
for i in range(len(place)):
for j in range(len(place[0])):
if place[i][j] == 'P':
people.append([i, j])
flag = True
for x, y in people:
if not check(place, x, y):
flag = False
break
if flag:
answer.append(1)
else:
answer.append(0)
return answer
출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges
'알고리즘[Python] > 프로그래머스' 카테고리의 다른 글
[ Lv 2 ] 행렬의 곱셈 (0) | 2021.07.10 |
---|---|
[ Lv 2 ] 최댓값과 최솟값 (0) | 2021.07.09 |
[ Lv 2 ] 다음 큰 숫자 (0) | 2021.07.08 |
[ Lv 2 ] [3차] n진수 게임.py (0) | 2021.07.07 |
[ Lv 2 ] [3차] 파일명 정렬.py (0) | 2021.07.06 |