Skip to content

Commit 7390fc1

Browse files
zaqquumMingguriguri
authored andcommitted
[PGS]#81302. 거리두기 확인하기/lv2/1h20min(힌트)
https://school.programmers.co.kr/learn/courses/30/lessons/81302
1 parent e42688b commit 7390fc1

File tree

1 file changed

+54
-0
lines changed

1 file changed

+54
-0
lines changed
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
"""
2+
[프로그래머스] 거리두기 확인하기: 백트레킹 / lv2
3+
https://school.programmers.co.kr/learn/courses/30/lessons/81302
4+
"""
5+
from collections import deque
6+
7+
dy =[1,-1,0,0] ; dx=[0,0,-1,1]
8+
def solution(places):
9+
answer = []
10+
for place in places :
11+
# 1. 응시자 위치 확인
12+
people = []
13+
for i in range(5) :
14+
for j in range(5) :
15+
if place[i][j] == "P":
16+
people.append([i,j])
17+
#2. 응시자 별로 거리 확인하기
18+
def bfs(start):
19+
clv = 0
20+
visited = [[-1]*5 for _ in range(5)] # 거리 저장하기(lv)
21+
q = deque([start])
22+
visited[start[0]][start[1]] = 0
23+
while q :
24+
cy,cx = q.popleft()
25+
clv = visited[cy][cx]
26+
if clv >= 2 :
27+
break
28+
for d in range(4):
29+
ny,nx = cy + dy[d] , cx +dx[d]
30+
if 0<= ny < 5 and 0 <= nx < 5 and visited[ny][nx] <= -1 :
31+
if place[ny][nx] == "X":
32+
visited[ny][nx] = clv +1
33+
continue
34+
elif place[ny][nx] == "O":
35+
q.append([ny,nx])
36+
visited[ny][nx] = clv +1
37+
elif place[ny][nx] == "P" :
38+
return False
39+
return True
40+
flag = True
41+
for p in range(len(people)):
42+
start = people[p]
43+
flag = bfs(start)
44+
if not flag :
45+
break
46+
if flag:
47+
answer.append(1)
48+
else :
49+
answer.append(0)
50+
51+
52+
# print(people)
53+
# print(f"answer{answer}")
54+
return answer

0 commit comments

Comments
 (0)