ohtuna   4년 전

84%에서 계속 시간 초과가 나서 질문드립니다.


일단 알고리즘 설명부터 하겠습니다


  1. 자기 자신 방문시 사이클 노드이므로 방문했다고 표시하고 넘어갑니다.
  2. 만약 그렇지 않은 노드의 경우 go 함수를 통하여 탐색을 시작 합니다.
  3. 탐색 과정은 방문한 노드는 체크하면서 만약 사이클 노드라면 ffind 상태 변수에 true를 주어 return 될때 원복을 하지 않습니다.
  4. 만약 사이클 노드가 아닌경우라면 원복을 합니다

    혹시 이방법으로는 풀수 없는 문제 인가요? 시간복잡도는 n이지 않나요 ???

nahwasa   4년 전

예를들어 2 3 4 5 4 6

이럴 경우, 위 경우로는

1->2->3->4->5->4

2->3->4->5->4

3->4->5->4

4->5->4 루프 찾음!

6->6 루프 찾음!

이렇게 됩니다.

루프 찾을때 까지 동일한 동작을 계속하니 O(N^2)이 될듯하네요.

O(N)으로 되시려면

처음에 첫번째 인자에서 go함수들어갔을 때 1->2->3->4->5->4 이후로 바로 다 넘기고 6->6 으로 가야겠죠!


ohtuna   4년 전

@nahwasa

visit 방문으로 표시하고, 방문된 노드에 한해서는 return 하는데 그렇게 된다는건가요??


nahwasa   4년 전

아..? 죄송합니다.

go 함수 재귀호출에서 start가 변경되지 않길래 그렇게 판단했네요 ㅠㅠ

바로 다음으로 넘어가는거라면

저랑 같은 방식에 전 특히나 느린 자바인데.. 이게 왜 시간초과일까요 ㄷㄷ

다시 봐보겟습니다! 성급하게 댓글달아 죄송합니다.

ohtuna   4년 전

@nahwasa

아하 말씀하신게 무슨말인지 알겠어요 ㅋㅋ 제가 잘못이해한거 같네요 감사합니다.

nahwasa   4년 전

33번줄에서 다시 바꾸는군요! 그럼 처음 말한게 맞았군요!

는.. 이해하신듯하군요.

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