kingzino   3년 전

구현한 코드가 복잡 하시다면 죄송합니다. ㅠㅠ


우선 제가 질문드릴 사항은 queue를 구현할 때 deque를 사용한 것과 그냥 list를 사용한 것의 시간차이 입니다.

제가 생각하기로는 deque에서 popleft()를 할 때 시간 복잡도는 O(1) 이고, list에서 pop()을 할 때는 O(N)입니다.

그러나 백준 사이트에서 두 코드 다 돌려본 결과 deque가 2배정도 느리게 나왔습니다.

이유가 무엇인지 모르겠습니다.


list 쓸 때 : 약 120ms

deque 쓸 때 : 약 210ms


list로 구현한 것은 첫번째 코드이고

deque로 구현한 것은 두번째 코드입니다.


두번째 코드에서 min_dist를 구하는 과정에서 list를 새로 할당 해줬는데 

첫번째랑 똑같이 고쳐 해봐도 시간은 안 변하네요,,

python3로 돌려도 봤지만 시간은 변함없이 list가 더 빨랐습니다.


이유가 궁금합니다.

mugglim   3년 전

아래의 코드처럼 deque를 사용하여 제출하면 약 96ms로 통과됩니다.
반면, list를 사용하면 72ms로 통과됩니다.

저도 한 가지 의문점이, deque의 peek at leftmost item, peek at rightmost item은 O(1)인데 어디서 더 time이 발생하는지 궁금하네요!..

kingzino   3년 전

deque에 삽입 시 연산이 O(1) 이지만 실제로는 list 삽입과 차이가 좀 나네요.

아마 list에서 첫번째 원소를 빼는 과정보다 넣는 과정에서의 패널티가 좀 더 큰 것 같아요.

밑의 소스코드로 참고 해보시면 좋을 것 같습니다.!!


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