mhkim4886   2년 전

코드 1: https://www.acmicpc.net/source...

코드 2: https://www.acmicpc.net/source...

코드 1은 11.992ms, 코드 2는 7.612ms가 나왔습니다.

코드 1의 경우는 unordered_map을 사용해서, O(n^2)에 a, b 배열에서의 합을 모두 저장한 후 O(n^2)에 c, d 배열의 합을 구해 -(c+d)의 갯수를 unordered_map에서 찾아서 합합니다.

코드 2의 경우는 vector를 사용해서, O(n^2)에 a, b 배열에서의 합을 모두 저장한 후 이것을 정렬한 후에, O(n^2logn)에 c, d 배열의 합을 구해서 -(c+d)의 갯수를 찾아서 합합니다.

시간복잡도 상으로는 코드 1이 당연히 빨라야 하는데 코드 2가 더 빨라서 질문을 올립니다.

unordered_map은 해시 테이블이라 O(1)일텐데 이 친구도 상수가 너무 커서 이러는 걸까요 :(

Green55   2년 전

네. unordered_map은 꽤 상수가 큽니다

WeissBlume   2년 전

그래서 (딱히 실제 대회에서 쓸 일은 거의 없지만) gcc의 gp_hash_table 확장을 이용하면 실제로 해시 테이블을 이용한 해법이 훨씬 빠르게 동작합니다(코드, 참고한 코포 블로그).

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