16236번 - 아기 상어
구현한 코드가 복잡 하시다면 죄송합니다. ㅠㅠ
우선 제가 질문드릴 사항은 queue를 구현할 때 deque를 사용한 것과 그냥 list를 사용한 것의 시간차이 입니다.
제가 생각하기로는 deque에서 popleft()를 할 때 시간 복잡도는 O(1) 이고, list에서 pop()을 할 때는 O(N)입니다.
그러나 백준 사이트에서 두 코드 다 돌려본 결과 deque가 2배정도 느리게 나왔습니다.
이유가 무엇인지 모르겠습니다.
list 쓸 때 : 약 120ms
deque 쓸 때 : 약 210ms
list로 구현한 것은 첫번째 코드이고
deque로 구현한 것은 두번째 코드입니다.
두번째 코드에서 min_dist를 구하는 과정에서 list를 새로 할당 해줬는데
첫번째랑 똑같이 고쳐 해봐도 시간은 안 변하네요,,
python3로 돌려도 봤지만 시간은 변함없이 list가 더 빨랐습니다.이유가 궁금합니다.
아래의 코드처럼 deque를 사용하여 제출하면 약 96ms로 통과됩니다.반면, list를 사용하면 72ms로 통과됩니다.
저도 한 가지 의문점이, deque의 peek at leftmost item, peek at rightmost item은 O(1)인데 어디서 더 time이 발생하는지 궁금하네요!..
deque에 삽입 시 연산이 O(1) 이지만 실제로는 list 삽입과 차이가 좀 나네요.
아마 list에서 첫번째 원소를 빼는 과정보다 넣는 과정에서의 패널티가 좀 더 큰 것 같아요.
밑의 소스코드로 참고 해보시면 좋을 것 같습니다.!!
댓글을 작성하려면 로그인해야 합니다.
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가 더 빨랐습니다.
이유가 궁금합니다.