프로그래머스 - 거리두기(2021 카카오 채용연계형 인턴십)
프로그래머스 - 거리두기(2021 카카오 채용연계형 인턴십)
https://programmers.co.kr/learn/courses/30/lessons/81302
간단했지만 실수를 좀 많이했다.. p에서 다른 p를 찾는데 여기서 실수를 저질렀다.. 거리가 3 이상이면 찾지 않아도 되기에 종료 조건을 dist >=3일 경우 종료해 주었다. 제출해 보니 하나도 맞지 못했다. 당연했다.. 현재 거리를 기준으로 해야하기에 dist>=2로 해주는게 맞았다. 현재 거리가 2이면 다음에 찾는 지역은 거리는 3이 되므로 찾지 않아도 된다... 이것때문에 삽질을 조금 했다. 다시 수정해서 제출하니 성공했다.
로직은 bfs사용했다. 중간에 탈출이 쉽기 때문이다. bfs를 이용해서 좌석에 앉아 있는 사람을 기준으로 4방향으로 탐색을 진행했고 중간에 탈출 조건은 현재 거리가 2이상일 때 탈출했다(더 이상 탐색 진행 x). p를 찾았고 그 거리가 2이하이면 멘하탄거리를 지키지 않았기에 거리두기를 지키지 않은것이다. 주어진 조건에서 응시자가 앉아있는 자리 사이가 파티션으로 막혀 있을 경우에는 허용합니다. 아래의 경우이다. 첫번째 P인 (0,0)에서 탐색을 진행해보면 (1,1)위치에 P를 탐색하지 못하게 하면 된다. 조건을 빈테이블(O)일 경우만 움직이게 하므로써 해결 할 수 있다.
ex)
px
xp
이 후 방문했던 곳은 재방문 못하도록 처리해주면서 몇명의 사람이 거리두기를 지키지 않았는지 확인하면 된다.
코드
from collections import deque
dr = [1,-1,0,0]
dc = [0,0,1,-1]
def bfs(start_r,start_c,grid):
q = deque()
visited = [[False] * 5 for _ in range(5)]
q.append((start_r, start_c,0))
visited[start_r][start_c] = True
distance = [[10000] * 5 for _ in range(5)]
tmp_p = []
while q:
now_r, now_c, dist = q.popleft()
# 2이상인 거리는 볼 필요가 없다.
if dist>=2:
break
for i in range(4):
next_r = now_r + dr[i]
next_c = now_c + dc[i]
next_dist = dist +1
if 0<=next_r<5 and 0<=next_c<5 and not visited[next_r][next_c]:
visited[next_r][next_c] = True
if grid[next_r][next_c] == 'O':
q.append((next_r,next_c, next_dist))
# 만약 다음 방문 할 곳에 사람이 앉아있으면
elif grid[next_r][next_c] == 'P':
#거리가 2보다 작거나 같다면
if dist<=2:
return False
return True
def solution(places):
answer = []
for i in places:
grid = []
for k in i:
grid.append(list(k))
flag = False
for rr in range(5):
for cc in range(5):
# 응시자가 앉아있는 자리를 기준으로 맨하탄 거리가 2이하인 응시자를 찾는다.
if grid[rr][cc] == 'P':
if not bfs(rr,cc,grid):
flag = True
break
if not flag:
answer.append(1)
elif flag:
answer.append(0)
return answer
Author And Source
이 문제에 관하여(프로그래머스 - 거리두기(2021 카카오 채용연계형 인턴십)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@beomsun/프로그래머스-거리두기2021-카카오-채용연계형-인턴십저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)