https://programmers.co.kr/learn/courses/30/lessons/81302
맨해튼 거리 1일 때, 2일 때를 나눠서 생각해보면 쉽게 풀 수 있는 문제였다.
확실히 2단계까지는 주어진 알고리즘으로 구현만 하면 쉽게 풀 수 있는 것 같다.
나의 풀이
def manhattan(i,j,place):
# 맨허튼 거리 1
man1 = [(i-1,j),(i+1,j),(i,j+1),(i,j-1)]
man2_1 = [(i-2,j),(i+2,j),(i,j-2),(i,j+2)]
man2_2 = [(i-1,j-1),(i-1,j+1),(i+1,j-1),(i+1,j+1)]
for man in man1:
x,y = man[0],man[1]
if 0<= x <=4 and 0<= y <=4:
if place[x][y] == 'P':
return False
# 맨허튼 거리 2-1
for man in man2_1:
x,y = man[0],man[1]
if 0<= x <=4 and 0<= y <=4:
if place[x][y] == 'P':
if place[(x+i)//2][(y+j)//2] !='X':
return False
for man in man2_2:
x,y = man[0],man[1]
if 0<= x <=4 and 0<= y <=4:
if place[x][y] == 'P':
if place[i][y] !='X' or place[x][j] !='X':
return False
return True
def solution(places):
answer = []
for num,place in enumerate(places):
check = True
for i in range(5):
for j in range(5):
if place[i][j] == 'P': # 사람인 경우
if not manhattan(i,j,place):
check = False
break
if check:
answer.append(1)
else:
answer.append(0)
return answer
'Programming > Programmers' 카테고리의 다른 글
[프로그래머스] 예상 대진표(Python) (0) | 2021.10.31 |
---|---|
[프로그래머스] 게임 맵 최단거리(Python) (0) | 2021.10.31 |
[프로그래머스] 뉴스 클러스터링(Python) (0) | 2021.10.30 |
[프로그래머스] 셔틀버스 (Python) (0) | 2021.10.30 |
[프로그래머스] 베스트앨범 (Python) (0) | 2021.10.29 |
댓글