처음에는 bfs로 풀려고 했다. 제한시간도 넉넉해서 어떤 방법으로 풀어도 되겠다 싶었는데, 그러던 와중.
잘 보니까 일단 현재 내가 P일때 상하좌우로 P가 있으면 안된다. 그렇다면 상하좌우로 2단계씩 넘어서도 봐야할까 했는데, 잘 보니까 O이면 상하좌우에 P가 2개 이상이면 실패인것을 알아냈다.
현재 빗금친 P가 나의 위치이면 왼쪽 O에서 봤을 때 주위에 P가 2개 이상이기 때문에 거리두기 실패 인 것을 알 수 있다.
from collections import deque
def solution(places):
answer = []
for place in places:
answer.append(pfunc(place))
return answer
def pfunc(place):
for i in range(5):
for j in range(5):
if place[i][j] == 'P':
if 0<=i-1 and place[i-1][j] == 'P':
return 0
elif i+1<5 and place[i+1][j] == 'P':
return 0
elif 0<=j-1 and place[i][j-1] == 'P':
return 0
elif j+1<5 and place[i][j+1] == 'P':
return 0
if place[i][j] == 'O':
pCount = 0
if 0<=i-1 and place[i-1][j] == 'P':
pCount += 1
if i+1<5 and place[i+1][j] == 'P':
pCount += 1
if 0<=j-1 and place[i][j-1] == 'P':
pCount += 1
if j+1<5 and place[i][j+1] == 'P':
pCount += 1
if pCount > 1:
return 0
else:
return 1