이 문제는 Linked List Cycle Detection 문제 중 하나로,
**Floyd's Cycle Detection Algorithm (Tortoise and Hare)**를 활용하여 해결할 수 있습니다.
아래는 단계별 풀이 방법입니다.
1. Floyd’s Cycle Detection Algorithm
- 두 포인터(Tortoise와 Hare)를 사용하여 Linked List를 순회합니다.
- 속도 차이를 이용해 두 포인터가 같은 노드에 도달하면 사이클이 있음을 확인할 수 있습니다.
- 사이클이 발견되면, 사이클의 시작 노드를 찾는 추가 작업을 수행합니다.
2. 단계별 풀이
1단계: 사이클 존재 여부 확인
- slow 포인터는 한 번에 한 노드씩 이동합니다.
- fast 포인터는 한 번에 두 노드씩 이동합니다.
- 두 포인터가 만나면 사이클이 존재합니다.
- 만약 fast 또는 fast.next가 None에 도달하면 사이클이 없습니다.
2단계: 사이클의 시작 노드 찾기
- 사이클이 있음을 확인한 후, slow 포인터를 head로 되돌립니다.
- slow와 fast를 각각 한 칸씩 이동하며 다시 만나는 지점을 찾습니다.
- 두 포인터가 만나는 지점이 사이클의 시작 노드입니다.
'LeetCode > 주제별 보충' 카테고리의 다른 글
Graphs (Union Find): 684. Redundant Connection (1) | 2025.01.28 |
---|---|
Graphs(싸이클확인, Union Find): 323. Number of Connected Components in an Undirected Graph ★★★ (0) | 2025.01.28 |
Graphs (싸이클탐지): 997. Find the Town Judge (0) | 2025.01.27 |
Graphs (싸이클 탐지): 1971. Find if Path Exists in Graph (0) | 2025.01.27 |
Graphs(Valid Tree: 싸이클 탐지, 연결성): 261. Graph Valid Tree★★★ (0) | 2025.01.27 |