네. find 함수는 최악의 경우 O(n)번 순회해야 합니다. 거기에 길이가 20 이하니까.
string 자체가 같은지 비교하려면 최악의 경우 O(max(|s|,|s'|)+1)만큼 수행해야 할 거고요.
1764번 - 듣보잡
네. find 함수는 최악의 경우 O(n)번 순회해야 합니다. 거기에 길이가 20 이하니까.
string 자체가 같은지 비교하려면 최악의 경우 O(max(|s|,|s'|)+1)만큼 수행해야 할 거고요.
set 보다 빠른 자료구조는 잘 모르겠네요. Trie를 써도 되긴 하지만
최대 1000만개의 문자가 들어올 수 있다는 점을 감안하면 Trie의 포인터 부분을 배열이 아닌 map으로 관리해야 할 거고요.
몇 가지 선택안이 있습니다.
(1) 정렬 후에 binary search
(2) hash (unordered_map, unordered_set 계열)
여담으로 이 문제 제한에 비해 데이터가 꽤 약한 거 같네요.
입력받은 모든 문자열 길이의 합 <= 190만
n+m <= 10만, n <= 5만이네요.
시간 제한과 메모리를 늘리고 모든 문자열 길이의 합 <= 1000만으로 늘리거나
아니면 문자열 길이의 합은 최대 x이다. 라는 걸 명시해야 할 거 같네요.
헉.. 최악의 경우 O(max(|s|,|s'|)+1)만큼 수행해야 할 거고요.
-> 최악의 경우 O(min(|s|,|s'|)+1)만큼 수행해야 할 거고요. 에요.. ㅠㅠ
String의 길이가 모두 20인 경우 최악의 케이스입니다.
댓글을 작성하려면 로그인해야 합니다.
2015112119 5년 전
처음에 벡터를 이용해서 N개의 배열들 중 이미 있는 문자열을 검색했는데 시간초과가 뜨더라구요
그래서 set을 이용해서 다시 검색했는데 맞다고 나오네요. set이 이진 탐색을 기반으로 움직여서 그런 걸까요?
stl중에서 set보다 더 빠른 자료구조가 있을까요?