개발자를 희망하는 죠르디가 카카오에 면접을 보러 왔습니다.
코로나 바이러스 감염 예방을 위해 응시자들은 거리를 둬서 대기를 해야하는데 개발 직군 면접인 만큼 아래와 같은 규칙으로 대기실에 거리를 두고 앉도록 안내하고 있습니다.
- 대기실은 5개이며, 각 대기실은 5x5 크기입니다.
- 거리두기를 위하여 응시자들 끼리는 맨해튼 거리1가 2 이하로 앉지 말아 주세요.
- 단 응시자가 앉아있는 자리 사이가 파티션으로 막혀 있을 경우에는 허용합니다.
예를 들어,

5개의 대기실을 본 죠르디는 각 대기실에서 응시자들이 거리두기를 잘 지키고 있는지 알고 싶어졌습니다. 자리에 앉아 있는 응시자들의 정보와 대기실 구조를 대기실별로 담은 2차원 문자열 배열 places가 매개변수로 주어집니다. 각 대기실별로 거리두기를 지키고 있으면 1을, 한 명이라도 지키지 않고 있으면 0을 배열에 담아 return 하도록 solution 함수를 완성해 주세요.
def check(place):
ppl = []
# P 자리 좌표 배열에 넣기
for i in range(5):
for j in range(5):
if place[i][j] == 'P':
ppl.append([i, j])
# 좌표 돌면서 체크
for x, y in ppl:
for x2, y2 in ppl:
distance = abs(x - x2) + abs(y - y2) # 맨해튼 거리 계산하기
if (distance == 0 or distance > 2): continue # 거리 0이거나 (같은 좌표) 3 이상이면 체크 X
if (distance == 1):
return 0
# 행 같은데 파티션 없는 경우
elif x == x2 and place[x][int((y+y2)/2)] != 'X':
return 0
# 열 같은데 파티션 없는 경우
elif y == y2 and place[int((x+x2)/2)][y] != 'X':
return 0
# 대각선
elif x != x2 and y != y2:
if place[x][y2] != 'X' or place[x2][y] != 'X':
return 0
return 1
def solution(places):
answer = []
for place in places:
answer.append(check(place))
return answer