👨‍🏫ps/❄️프로그래머스

[프로그래머스] 거리두기 확인하기 [python]

peacekim 2023. 3. 29. 22:46
반응형

문제

BFS로 문제를 풀었다,,실수가 많아서 오래 걸렸다,, 금방 풀줄 알았는데,,

코드

def solution(places):
    answer = []
    for place in places:
        q = []
        for i,p in enumerate(place):
            for j in range(len(place)):
                if p[j] == "P":
                    q.append([i,j])
        if len(q) == 0:
            answer.append(1)
            continue
        if bfs(place, q):
            answer.append(1)
            continue
        answer.append(0)
    return answer

def bfs(graph, q):
    mX = [0,0,1,-1]
    mY = [1,-1,0,0]
    
    for c in q:
        queue = [[c[0], c[1], 0]]
        visited = [[False]*5 for i in range(5)]
        visited[c[0]][c[1]] = True
        while queue:           
            cur = queue.pop()
            for i in range(4):
                nX = mX[i] + cur[0]
                nY = mY[i] + cur[1]
                if nX < 0 or nX >= 5 or nY < 0 or nY >= 5 or graph[nX][nY] == "X" or visited[nX][nY]:
                    continue
                if graph[nX][nY] == "P" and cur[2] <= 1:
                    return False
                if graph[nX][nY] == "O":
                    queue.append([nX,nY,cur[2]+1])
                    visited[nX][nY] = True
        
    return True
    
"""
대기실 5개, 대기실 크기 5x5
맨허튼 거리(|r1-r2| + |c1-c2|) 2이하로 앉지 않기
파티션이 있다면 괜찮음 갈 수 있는 거리면 안괜찮음
P들을 다 뽑아서 돌려도 될 듯 BFS로
"""
반응형