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

bej_ve·2022년 11월 5일
0

python알고리즘

목록 보기
46/46

<문제>
5개의 대기실을 본 죠르디는 각 대기실에서 응시자들이 거리두기를 잘 기키고 있는지 알고 싶어졌습니다. 자리에 앉아있는 응시자들의 정보와 대기실 구조를 대기실별로 담은 2차원 문자열 배열 places가 매개변수로 주어집니다. 각 대기실별로 거리두기를 지키고 있으면 1을, 한 명이라도 지키지 않고 있으면 0을 배열에 담아 return 하도록 solution 함수를 완성해 주세요.

  • places의 원소는 P,O,X로 이루어진 문자열입니다.
  • places 원소의 길이(대기실 가로 길이) = 5
  • P는 응시자가 앉아있는 자리를 의미합니다.
  • O는 빈 테이블을 의미합니다.
  • X는 파티션을 의미합니다.

<코드>

from collections import deque

def bfs(p):
    start=[]
    
    for i in range(5):
        for j in range(5):
            if p[i][j]=='P':
                start.append([i,j])
    for s in start:
        queue=deque([s])
        visited=[[0]*5 for i in range(5)]
        distance=[[0]*5 for i in range(5)]
        visited[s[0]][s[1]]=1
        
        while queue:
            y,x=queue.popleft()
            dx=[-1,1,0,0]
            dy=[0,0,-1,1]
            
            for i in range(4):
                nx=x+dx[i]
                ny=y+dy[i]
                
                if 0<=nx<5 and 0<=ny<5 and visited[ny][nx]==0:
                    if p[ny][nx]=='O':
                        queue.append([ny,nx])
                        visited[ny][nx]=1
                        distance[ny][nx]=distance[y][x]+1
                        
                    if p[ny][nx]=='P' and distance[y][x]<=1:
                        return 0
    return 1

def solution(places):
    answer = []
    for i in places:
        answer.append(bfs(i))
        
    return answer

0개의 댓글