https://leetcode.com/problems/merge-k-sorted-lists/
<문제>
You are given an array of k linked-lists lists, each linked-list is sorted in ascending order.
Merge all the linked-lists into one sorted linked-list and return it.
<예시>
Input: lists = [[1,4,5],[1,3,4],[2,6]]
Output: [1,1,2,3,4,4,5,6]
class Solution2:
def mergeKLists(self, lists) -> ListNode:
root = result = ListNode(None)
heap = []
for i in range(len(lists)):
if lists[i]:
# linked list의 root를 heap에 저장
heapq.heappush(heap, (lists[i].val, i, lists[i]))
while heap:
# root가 가장 작은 값을 가진 linked list부터 나온다
node = heapq.heappop(heap)
idx = node[1]
result.next = node[2]
result = result.next
if result.next:
heapq.heappush(heap, (result.next.val, idx, result.next))
다음과 같은 linked list 2개가 있다고 가정하자.
value가 작은 1 node가 pop된다.
그리고 그 linked list의 다음 노드가 heapq로 insert된다.
1, 4 중 1이 더 우선순위가 높으므로 1 node가 리턴된다.
그 다음에 다음 node인 3이 heapq로 insert
3, 4 중 3의 우선순위 높으므로 3 node가 리턴
그 다음에 다음 node인 4가 heapq로 insert
이러한 과정을 반복하다보면 다음과 같은 linked list 생성된다
'다전공_컴퓨터공학 > 알고리즘 문제풀이' 카테고리의 다른 글
[파이썬 알고리즘] 11장 - 보석과 돌 (defaultdict, Counter 사용) (0) | 2020.12.20 |
---|---|
[파이썬 알고리즘] 11장 - 해시맵 디자인 (leetcode 706) ⭐ (0) | 2020.12.20 |
[파이썬 알고리즘] 10장 - 원형 데크 디자인 (leetcode 641) (0) | 2020.12.17 |
[파이썬 알고리즘] 8장 - 역순 연결리스트 2 (leetcode 92) (0) | 2020.11.20 |
[파이썬 알고리즘] 8장 - 홀짝 연결 리스트 (leetcode 328) (0) | 2020.11.19 |