코딩 테스트 준비
Bucket Brigade – 실버 4
개발쉐발
2023. 1. 2. 17:06
728x90
반응형
BFS: 함수의 return 조건은 찾고자 하는 값을 찾았을 때이며 queue를 사용하여 모든 범위를 확인할 수 있기에 최단거리만이 아니라 넓이와 같은 문제에서도 사용할 수 있다.
1. Queue를 이용한다.
2. d=[(-1,0),(1,0),(0,-1),(0,1)]를 선언 해당 d를 반복문으로 더 했을 때 행렬의 범위를 벗어나는지 확인.
3. 해당 조건을 완수 혹은 탐색 값인 경우의 조건문 확인 후, 조건 완료 시 return, 탐색 값일 경우 전 값에 초기화 +1을 하여 거리를 작성해두자.
* 외워야 할 포인트
q = deque()
q.append((y, x))
graph[y][x] = 0
while q: # bfs에서는 queue를 사용하여 반복문을 이용해서 탐색을 한다.
y, x = q.popleft()
for dy, dx in d: # map 안의 xy를 모두 반복해서 탐색.
Y, X = y+dy, x+dx
정답 코드
from collections import deque
def bfs(y, x):
q = deque()
q.append((y, x))
graph[y][x] = 0
while q: # bfs에서는 queue를 사용하여 반복문을 이용해서 탐색을 한다.
y, x = q.popleft()
for dy, dx in d: # map 안의 xy를 모두 반복해서 탐색.
Y, X = y+dy, x+dx
if (0 <= Y < 10) and (0 <= X < 10):
if graph[Y][X] == 'L':
return graph[y][x]
if graph[Y][X] == '.':
q.append((Y, X))
graph[Y][X] = graph[y][x]+1 # 전의 값에 1을 더해서 cnt 값을 출력하기 위함.
graph = [list(input()) for _ in range(10)]
d = [(-1, 0), (1, 0), (0, -1), (0, 1)]
for i in range(10):
for j in range(10):
if graph[i][j] == 'B':
cnt = bfs(i, j)
print(cnt)
728x90
반응형