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'
로 해야함을 알게되었다,,,
사소하지만 중요한 차이 ㅜㅜ
쉬우면서도 복잡해서 어려운 문제였다