본문 바로가기

알고리즘/카카오 EASY

거리두기 확인하기 (Level 2)

문제

 

https://programmers.co.kr/learn/courses/30/lessons/81302

 

코딩테스트 연습 - 거리두기 확인하기

[["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"]] [1, 0, 1, 1, 1]

programmers.co.kr

 

내 풀이

 

대기실에서 'P'의 좌표를 따로 저장한다.

'P' 간의 거리를 구하기 위해 두 개씩 짝을 만든다. 

두 개의 좌표 간의 맨해튼 거리가 2 이하인 경우, 좌표의 위치가 어떻게 생겼는지에 따라 4가지 경우로 나눈다.

4가지 경우 안에서 해당하는 경우를 찾고 답을 구한다. 주석을 보면 더 이해하기 쉽다.

 

def solution(places):
    answer = []
    for place in places:
        people = []
        for i in range(5):
            for j in range(5):
                if place[i][j] == 'P':
                    people.append((i, j))
        flag = True
        for i in range(len(people)-1):
            for j in range(i+1, len(people)):
                ax, ay = people[i]
                bx, by = people[j]
                if abs(ax-bx) + (abs(ay-by)) <= 2:
                    # PXP
                    if ax-bx == 0 and place[ax][max(ay, by)-1] != 'X':
                        flag = False
                    # P
                    # X
                    # P
                    elif ay-by == 0 and place[max(ax, bx)-1][ay] != 'X':
                        flag = False
                    # PX
                    # XP
                    elif (ax < bx and ay < by and (place[ax][ay+1] != 'X' or place[bx][by-1] != 'X')) or (bx < ax and by < ay and (place[bx][by+1] != 'X' or place[ax][ay-1] != 'X')):
                        flag = False
                    # XP
                    # PX
                    elif (ax < bx and ay > by and (place[ax][ay-1] != 'X' or place[bx][by+1] != 'X')) or (bx < ax and by > ay and (place[bx][by-1] != 'X' or place[ax][ay+1] != 'X')):
                        flag = False
            if not flag:
                answer.append(0)
                break
        if flag:
            answer.append(1)
    return answer

 

총평

반드시 빠지는 조건이 없도록 해야 한다.

'알고리즘 > 카카오 EASY' 카테고리의 다른 글

튜플 (Level 2)  (0) 2022.07.04
수식 최대화 (Level 2)  (0) 2022.07.04
뉴스 클러스터링 (Level 2)  (0) 2022.06.28
실패율 (Level 1)  (0) 2022.06.28
괄호 변환 (Level 2)  (0) 2022.06.25