문제
dr = [-1, 1, 0, 0, -1, 1, -1, 1, -2, 2, 0, 0]
dc = [0, 0, -1, 1, -1, -1, 1, 1, 0, 0, -2, 2]
def solution(places):
answer = []
for i in range(5):
check = 1
for j in range(5):
for k in range(5):
if places[i][j][k] == 'P':
for l in range(12):
nj = j + dr[l]
nk = k + dc[l]
if 0<=nj<5 and 0<=nk<5 and places[i][nj][nk] == 'P':
if l < 4:
check = 0
break
elif 4 <= l < 8:
if places[i][nj][k] == places[i][j][nk] == 'X':
continue
else:
check = 0
break
elif 8 <= l:
if places[i][(nj + j)//2][(nk + k)//2] == 'X':
continue
else:
check = 0
break
answer.append(check)
return answer
for문이 왜이렇게 많지 ㅠㅠ 이러면서 풀었는데 남들도 다 비슷하게 풀어서 안심..
하나씩 돌면서 P가 들어오면
-> 근처에 P가 또 있는지 확인 (근처의 범위: 맨해튼 거리가 2 이하인 거리)
---> 상하좌우에 있다면 0
---> 대각선에 있다면
-----> 두 P 사이에 X가 두 개 있는지 확인. 없으면 0
---> 한 칸 띄운 상하좌우에 있다면
-----> 그 사이에 X가 있는지 확인. 없으면 0
의 구조로 풀었다!
'공부하자! > 알고리즘' 카테고리의 다른 글
백준 14502 연구소 파이썬 - DFS, BFS (0) | 2022.02.19 |
---|---|
백준 2309 일곱 난쟁이 파이썬 (0) | 2021.11.04 |
백준 4963 섬의 개수 파이썬 - bfs (0) | 2021.09.09 |
백준 7576번 토마토 파이썬 - bfs (0) | 2021.09.09 |
백준 1012번 유기농 배추 파이썬 - bfs (0) | 2021.09.09 |