파이썬 너비우선탐색 알고리즘 이해가 안되서 질문합니다.

조회수 819회

이미지

너비우선탐색 알고리즘 이해가 안되서 질문합니다.

너비우선탐색 알고리즘 구현 문제입니다. 사진에 있는 그래프를 딕셔너리형으로 나타냈습니다.

  1. 확인할 사람의 명단을 넣을 deque(양방향 큐)를 준비한다.
  2. 큐에서 한 사람씩 꺼낸다.
  3. 이 사람이 망고 판매상인지 확인한다.
  4. 큐가 비어있다면 네트워크에는 망고 판매상이 없다.

*종료조건

  • 망고 판매상이 발견되거나, 큐가 비는 경우

graph = {}

graph['you'] = ['alice', 'bob', 'claire'] graph['bob'] = ['anuj', 'peggy'] graph['alice'] = ['peggy'] graph['claire'] = ['thom', 'jonny'] graph['anuj'] = [] graph['peggy'] = [] graph['thom'] = [] graph['jonny'] = []

from collections import deque

def search(name): # 사람 검색하는 함수 search_queue = deque() # 큐를 선언 및 정의 search_queue += graph[name] # 그래프의명단을 큐에 대입 searched = [] # 이미 검색된 사람 리스트 선언

while search_queue: person = search_queue.popleft() if not person in searched: if person_is_seller(person): print(person + " is a mango seller") return True else: search_queue += graph[person] searched.append(person) return False

def person_is_seller(name): return name[-1] == 'm'

print(search_queue) print(search('thom'))

결과: deque(['alice', 'bob', 'claire'])

False

질문

  1. search함수의 while문이 구동되는 순서와 원리가 이해가 안됩니다.

  2. person_is_seller함수가 왜 있는지 의미를 모르겠네요.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)