거리두기 확인하기 [python]

Jaymee·2021년 11월 14일
0

처음에는 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
profile
backend developer

0개의 댓글