Algorithm 뽀개기/프로그래머스

[Python][프로그래머스] - 거리두기 확인하기

딸기케잌🍓 2021. 8. 11. 23:20

입출력 예

places result
[["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]

 

 

 

내풀이

from itertools import combinations
def solution(places):
    answer = []

    p_collect=[]
    for pan in places:
        p_collect = []
        for r in range(5):#POOOP
            for c in range(5):
                if pan[r][c] == 'P':
                    p_collect.append((r,c))

        combi = list(combinations(p_collect,2))
        flag = 1
        for i in combi:
            location1 = i[0]
            location2 = i[1]
            distance = calc_distance(location1,location2)
            if distance ==2:
                if location1[0] == location2[0] :
                    c = (location1[1]+location2[1])//2
                    if pan[location1[0]][c] == 'O':
                        answer.append(0)
                        flag = 0
                        break
                elif location1[1] == location2[1] :
                    r = (location1[0] + location2[0]) // 2
                    if pan[r][location1[1]] == 'O':
                        answer.append(0)
                        flag = 0
                        break
                elif pan[location1[0]][location2[1]] == 'O' or pan[location2[0]][location1[1]] == 'O':
                    answer.append(0)
                    flag = 0
                    break
            elif distance < 2:
                answer.append(0)
                flag = 0
                break
        if flag == 1:
            answer.append(1)
    return answer


def calc_distance(location1,location2):
    distance = abs(location1[0] - location2[0]) + abs(location1[1] - location2[1])
    return distance

이 문제는 

다음과 같이 P와 O가 위치할 때 거리두기를 지키지 않고 있다고 문제는 정의하고 있고 이 때 0을 리스트에 담아 리턴하면 된다.

위의 4가지 경우를 모두 커버하는게 관건!!

 

 

처음에는

pan[location1[0]][location2[1]] == 'O' or pan[location1[1]][location2[0]] == 'O'

로 써서 실패를 하다가 프로그래머스에 질문을 올리고

pan[location1[0]][location2[1]] == 'O' or pan[location2[1]][location1[0]] == 'O'

로 해야함을 알게되었다,,,

사소하지만 중요한 차이 ㅜㅜ

 

쉬우면서도 복잡해서 어려운 문제였다