본문 바로가기

사이클 감지

서로 다른 두 연결리스트의 교차점 찾기 leetcode 160. Intersection of Two Linked Lists 문제풀이. 문제: 서로 다른 두 연결리스트가 주어졌을 때, 첫 교차점을 찾아라. Hash Set 1. A 리스트를 먼저 순회하며 hash set에 노드들을 저장한다. 2. B 리스트 순회하며 노드들이 이미 hash set에 저장되어있는지 확인한다. 이미 저장되어 있다면 해당 노드를 반환한다. 3. 무사히 B리스트 순회를 마지막 노드까지 마쳤다면, 교차되는 노드가 없다는 뜻이므로 null을 반환한다. Floyd's Tortoise and Hare algorithm 이 문제 또한 토끼와 거북이 알고리즘으로 메모리를 사용을 O(1)으로 줄여줄 수 있다. Time Complexity: O(N) Space Complexity: O.. 더보기
연결리스트 사이클이 시작되는 노드 찾기 leetcode 142. Linked List Cycle II 문제풀이 문제: 주어진 연결리스트에서 사이클이 없다면 null을, 있다면 사이클이 시작되는 노드를 반환하라. 1. 주어진 노드를 Hash Set에 추가하면 순회한다. 2. 이미 Hash Set에 있는 노드를 만나면 사이클이 시작된 것이므로 해당 노드를 반환한다. 3. 무사히 순회를 끝냈으면 사이클이 없는 것 이므로, null을 반환한다. 141번 사이클 감지하기 문제에서 활용한 투 포인터 테크닉을 활용하여 공간을 O(1)만큼만 사용할 수 있다. leetcode 141. Linked List Cycle 사이클 감지하기 leetcode 141. Linked List Cycle 문제풀이 문제: 주어진 연결리스트에 사이클이 있다면 true를 없다면 .. 더보기
사이클 감지하기 leetcode 141. Linked List Cycle 문제풀이 문제: 주어진 연결리스트에 사이클이 있다면 true를 없다면 false를 반환하라 Hash Set 1. 각 노드를 set에 추가해가며 순회한다. 2. 다음에 순회할 노드가 이미 set에 들어있다면 true를 반환. 3. 순회를 무사히 마쳤다면 사이클이 없는 것이므로 false를 반환. 모든 노드를 set에 저장하려면 O(N)공간이 필요하다. set에 노드를 저장하는 것 대신, 노드의 val값에 이미 방문했음을 표시한다면 메모리를 아낄 수있다. Two Pointer 투 포인터 테크닉을 활용해서도 공간복잡도를 O(1)으로 제한할 수 있다. 투 포인터 테크닉은 한 포인터는 더 빠르게 또 다른 포인터는 더 느리게 움직이도록하는 테크닉을 말한다. .. 더보기