

입출력 예
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'
로 해야함을 알게되었다,,,
사소하지만 중요한 차이 ㅜㅜ
쉬우면서도 복잡해서 어려운 문제였다
'Algorithm 뽀개기 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][Lvl1][Java][Javascript] 자연수 뒤집어 배열로 만들기 (0) | 2023.08.27 |
---|---|
[Python] [프로그래머스] - 스킬트리 (0) | 2021.10.02 |
[Python] [프로그래머스] - 구명보트 (0) | 2021.09.19 |
[python][프로그래머스] - 주식가격 (0) | 2021.08.10 |
[Python][프로그래머스] - 더맵게 (0) | 2021.08.03 |