doublejy715   4년 전

위에것이 제가 만든 답인데요...

공통점이 for문이 이중적으로 들어가 있고

차이점이 저는 set의 이용, 밑의 코드는 1로 표시하기 입니다.

어디에서 시간이 차이가 나는지 궁금합니다.

참고로 아래 코드가 몇배 빠릅니다.

wider93   4년 전

단순히 set.add보다 list에 assign하는 것이 쉬운 연산이기 때문에 그렇습니다. 

집합에 새 원소 x를 넣는 것은 대충 다음과 같은 과정을 거칩니다.

일단 hash(x)를 계산하고, 그 값과 set의 크기로부터 x가 들어갈 위치를 결정합니다. 그 위치에 이미 x가 있는지도 체크하게 됩니다. 오래 걸리겠죠.

set의 장점은 원소 체크를 O(1)에 할 수 있다는 것인데 위에서 보듯 사실 그 상수가 그렇게 작지는 않습니다.

배열로 구현해도 같은 장점을 가지게 되고 상수가 더 작습니다. 

+ 그리고 pypy로 제출하셨는데 list로 자리를 먼저 배정해주면서 JIT 혜택을 더 잘 받을 가능성도 높겠네요.

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