willook   4년 전

문제를 푸는데 시간초과가 납니다.

제가 구현한 방식은 주어진 입력 조건은 그래프처럼 보고 DFS 방식으로 주어진 문자열에서 시작해서 소문자 문자열이 나타날때까지 탐색한 다음 나타난 소문자 문자열과 패턴 p를 비교하고 어디까지 비교했는지를 인자와 리턴 값으로 계속 넘기면서 구현했습니다.

또한 제가 생각한 제 구현의 시간복잡도는 다음과 같습니다.

최악의 경우가 잘 예측이 되지 않지만 A = B + C의 형태가 250(n)개, A = a 형태가 250(m)개가 나오는 경우라고 생각합니다.

제가 계산한 시간복잡도는 각 단어들을 리프까지 탐색하는데 O(n) 이 걸립니다.

탐색 결과 만들어지는 문자열의 최대 길이는 5*(n+1)일 테고 패턴 p와 선형적으로 비교하므로 마찬가지로 O(n)이 걸립니다.

따라서 걸리는 최종 시간복잡도는 O(n)이라고 생각합니다. (k=n+m)

제가 생각한 시간복잡도에서는 시간초과가 나는 이유를 잘모르겠습니다.

혹시 제가 구현한 부분 중 잘못된 부분이나 시간복잡도를 잘못 계산한 부분을 잘 모르겠습니다.
 

chogahui05   4년 전

이렇게 간단하게 풀리면 어려울 리가 없습니다.

playsworld16   8달 전

이 문제는 상당히 어려운 문제입니다.

탐색 결과 만들어지는 문자열의 최대 길이는 5*(n+1) 라고 하셨는데, 이보다 훨씬 긴 문자열을 만들 수 있습니다.

A = B + B

B = C + C

C = D + D

... 

YYY = ZZZ + ZZZ

ZZZ = abcde

대충 이런식으로 500줄을 채우면, 5*2^499 의 길이의 문자열이 만들어집니다.

이걸 전부 탐색하면 당연히 시간초과가 나겠죠? 전부 탐색하지 않는 다른 방법을 생각해내셔야 합니다.

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