티스토리 뷰

문제 링크

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이

def keep_dist(place):
    # 각 사람의 위치를 저장
    person_loc = [(y, x) for y in range(5) for x in range(5) if place[y][x] == 'P']

    # 두 사람의 거리를 비교
    for y, x in person_loc:
        for y2, x2 in person_loc:
            dist = abs(y-y2) + abs(x-x2)    # 맨해튼 거리
            # 같은 좌표이거나 거리가 2보다 큰 경우 continue
            if dist == 0 or dist > 2:
                continue
            # 두 사람 사이의 거리가 1인 경우
            if dist == 1:
                return 0
            # 거리가 2인 경우
            # 같은 열에서 두 사람 사이에 파티션이 없는 경우
            elif y == y2 and place[y][int((x+x2)/2)] != 'X':
                return 0
            # 같은 행에서 두 사람 사이에 파티션이 없는 경우
            elif x == x2 and place[int((y+y2)/2)][x] != 'X':
                return 0
            # 대각선에서 두 사람 사이 파티션이 없는 경우
            elif y != y2 and x != x2: 
                if place[y2][x] != 'X' or place[y][x2] != 'X':
                    return 0
    return 1


def solution(places):
    answer = []
    # 각 방의 거리두기 여부를 확인하고 결과를 answer에 추가
    for place in places:
        answer.append(keep_dist(place))
    return answer