2015112119   5년 전

처음에 벡터를 이용해서 N개의 배열들 중 이미 있는 문자열을 검색했는데 시간초과가 뜨더라구요

그래서 set을 이용해서 다시 검색했는데 맞다고 나오네요. set이 이진 탐색을 기반으로 움직여서 그런 걸까요? 

stl중에서 set보다 더 빠른 자료구조가 있을까요?

chogahui05   5년 전

네. find 함수는 최악의 경우 O(n)번 순회해야 합니다. 거기에 길이가 20 이하니까.

string 자체가 같은지 비교하려면 최악의 경우 O(max(|s|,|s'|)+1)만큼 수행해야 할 거고요.

chogahui05   5년 전

set 보다 빠른 자료구조는 잘 모르겠네요. Trie를 써도 되긴 하지만

최대 1000만개의 문자가 들어올 수 있다는 점을 감안하면 Trie의 포인터 부분을 배열이 아닌 map으로 관리해야 할 거고요.

몇 가지 선택안이 있습니다.

(1) 정렬 후에 binary search

(2) hash (unordered_map, unordered_set 계열)

chogahui05   5년 전

여담으로 이 문제 제한에 비해 데이터가 꽤 약한 거 같네요.

입력받은 모든 문자열 길이의 합 <= 190만

n+m <= 10만, n <= 5만이네요.

시간 제한과 메모리를 늘리고 모든 문자열 길이의 합 <= 1000만으로 늘리거나

아니면 문자열 길이의 합은 최대 x이다. 라는 걸 명시해야 할 거 같네요.

chogahui05   5년 전

헉..  최악의 경우 O(max(|s|,|s'|)+1)만큼 수행해야 할 거고요.

->  최악의 경우 O(min(|s|,|s'|)+1)만큼 수행해야 할 거고요. 에요.. ㅠㅠ

String의 길이가 모두 20인 경우 최악의 케이스입니다.

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