kojoo87   2년 전

python 시간초과때문에 그런데 혹 줄일 수 있는 방법이 있을까요?

efylo   2년 전

BFS를 구현할 때

temp_list (큐)에서 temp (노드)를 꺼내면서 방문 처리를 하기 보다는, 

temp_list (큐)에 temp (노드)를 집어넣을 때 방문 처리를 하는 방식이 중복이 덜 발생할 것으로 보입니다

kojoo87   2년 전

오 그렇네요. 감사합니다.

상기 답글에 내용과 같이 방문처리 위치를 바꾸니 시간초과 나오지 않네요.

그런데 어짜피 꺼낼 때 방문처리 하나 집어 넣을때 방문처리 하나 수행하는 동작은 동일하고 중복이 더 된다고 생각이 안드는데, 

혹 temp에 접근하여 temp[0], temp[1]을 불러오는데 시간이 많이 소모되는 건가요?

efylo   2년 전

temp_list (큐) 에서 꺼낼 때 원소를 넣을 때를 가정해보겠습니다. 

(현재 상태) temp_list = [1, 2, 3, ..., n]

현재 상태에서, 큐 안에 존재하는 모든 원소 [1, 2, 3, ..., n]는 현재 방문 처리가 되어있지 않습니다. 

  => 따라서 temp_list.append(1), temp_list.append(2), ... 등의 연산이 가능합니다. 

    => 그렇기에 temp_list (큐) 안에 중복되는 원소가 들어갈 수 있습니다. 

      => temp_list = [1, 1, 1, 2, 2, 2, ..., n, n, n] 과 같은 경우가 가능합니다. 

큐 안에 중복되는 원소가 들어갈 수 있어서, 큐에 넣기 전에 방문 처리를 해주신다고 보면 될 것 같아요..!

kojoo87   2년 전

음.. 이해가 잘 ㅠㅠ

39줄 다음에 17번줄에 있는 내용(x,y index수정 후)을 추가해서 넣어서 pass가 났는데, 사실 시간상으로는 36,37 줄 for 문에 의해 동일한 횟수로 동작하는거 같은데..제가 잘못이해하고 있는건가 음..어렵네요

do0134   2년 전

만약 한 싸이클에서 (1,2),(1,1)이 동시에 temp_list에 append되었을 경우

(1,2)를 팝하는 싸이클에서 (1,1)이 temp_list에 append되기 때문일 거 같습니다.

kojoo87   2년 전

아 그렇네요~ 이해했습니다. 감사합니다.

댓글을 작성하려면 로그인해야 합니다.