[Programmers] - 거리두기 확인하기 (Level 2)
2021 KAKAO 채용연계형 인턴십
LEVEL : 2
문제링크
places =[["POOOP", "OXXOX", "OPXPX", "OOXOX", "POXXP"], ["POOPX", "OXPXP", "PXXXO", "OXXXO", "OOOPP"], ["PXOPX", "OXOXP", "OXPOX", "OXXOP", "PXPOX"], ["OOOXX", "XOOOX", "OOOXX", "OXOOX", "OOOOO"], ["PXPXP", "XPXPX", "PXPXP", "XPXPX", "PXPXP"]]
def solution(places):
import numpy as np
answer = []
for place in places:
#응시생 자리 좌표 구하기
seat = [[i,j] for i in range(5) for j in range(5) if place[i][j] == 'P']
ans_tmp = 1
for i in range(len(seat)-1):
for j in range(i,len(seat)):
x1, y1 = seat[i][0], seat[i][1]
x2, y2 = seat[j][0], seat[j][1]
if abs(x1-x2) + abs(y1-y2) == 1: # 거리 1 이면 무조건 위반
ans_tmp = 0
break
elif abs(x1-x2) + abs(y1-y2) == 2: # 거리 2 일때
if x1 == x2 or y1 == y2: #직선경로
if place[int((x1+x2)/2)][int((y1+y2)/2)] == 'O':
ans_tmp = 0
break
elif x1<x2 and y1<y2: #대각선경로 \
if place[x1][y2] == 'O' or place[x2][y1] == 'O':
ans_tmp = 0
break
else : #대각선경로 /
if place[min(x1,x2)][min(y1,y2)] == 'O' or place[max(x1,x2)][max(y1,y2)] == 'O':
ans_tmp = 0
break
answer.append(ans_tmp)
return answer
solution(places)
[1, 0, 1, 1, 1]
Comments