인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

soh9909님의 프로필 이미지

작성한 질문수

deque 코드 오류

작성

·

156

0

from collections import deque
n, l, r = map(int, input().split())
graph=[]
for _ in range(n):
    graph.append(list(map(int, input().split())))
direction =0

def bfs():
    dq = deque()
    dx = [1, 0, -1, 0]
    dy = [0, 1, 0, -1]
    visited = [[0]*n for _ in range(n)]
    visited[0][0]=1
    move=[]
    move.append((0, 0))
    dq.append((0, 0))
    while True:
        x, y = dq.popleft()

x, y = dq.popleft()

^^^^^^^^^^^^

IndexError: pop from an empty deque

 

dq가 비었다고 나오는데 분명 dq.append((0,0))으로 넣어줬는데 empty deque으로 뜨는 이유를 모르겠습니다 ㅜㅜ

답변 1

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴이에요. 코드를 보니 문제가 발생하는 부분은 다음과 같아요.

x, y = dq.popleft()x, y = dq.popleft()

위 코드의 문제는 x, y = dq.popleft() 라인에서 문제가 발생하고 있어요. 코드를 보면 두 번 작성되어 있고, 오류 메시지에 따르면 pop from an empty deque 라고 나와 있어요. 이 오류는 비어있는 deque에서 popleft() 연산을 수행하려고 할 때 발생하는 오류에요.

단계별로 코드를 따라가보면, 먼저 dq.append((0,0))로 deque에 (0,0)을 추가하고, 그 다음에 dq.popleft()로 값을 꺼내려고 하는데, 위 코드에서 popleft()를 두 번 호출하고 있어요. 그래서 처음 호출할 때는 값이 존재하지만, 두 번째 호출할 때에는 이미 모든 요소가 꺼내져서 비어있는 상태여서 오류가 발생하는 거예요.

해당 부분을 수정해서 한 번만 호출하도록 코드를 변경해보세요.

x, y = dq.popleft()

위와 같이 코드를 수정하면 될 것 같아요. 이렇게 수정하면 popleft()를 한 번만 호출하게 되고, 오류가 발생하지 않을 거에요. 이렇게 수정한 뒤 실행해보세요. 문제가 해결되지 않는다면 다시 말씀해주세요.

soh9909님의 프로필 이미지
soh9909
질문자

코드블럭 안에는 dq.popleft() 가 한번밖에 없는데 해결방안이 잘못된 것 같아요ㅜㅜ

soh9909님의 프로필 이미지

작성한 질문수

질문하기