์•Œ๊ณ ๋ฆฌ์ฆ˜๐Ÿฅš/๋ฌธ์ œํ’€์ด (Python)

[LeetCode] 21. Merge_Two_Sorted_Lists (Easy) 2023/5/5

๐Ÿช„ํ•˜๋ฃจ๐Ÿช„ 2023. 5. 5. 16:44
728x90
๋ฌธ์ œ ์ œ๋ชฉ ์ •๋‹ต๋ฅ  ๋‚œ์ด๋„
21. Merge-Two-Sorted-Lists 62.6% Easy
 

Merge Two Sorted Lists - LeetCode

Can you solve this real interview question? Merge Two Sorted Lists - You are given the heads of two sorted linked lists list1 and list2. Merge the two lists in a one sorted list. The list should be made by splicing together the nodes of the first two lists

leetcode.com

 

๋ฌธ์ œ์š”์•ฝ

์ •๋ ฌ๋˜์–ด ์žˆ๋Š” ๋‘ ๊ฐœ์˜ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ฅผ ํ•˜๋‚˜์˜ ์ •๋ ฌ๋œ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋กœ ๋ณ‘ํ•ฉํ•˜๋ผ

์กฐ๊ฑด 1) ๋‘ ๊ฐœ์˜ ์ •๋ ฌ๋œ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๊ฐ€ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค

์กฐ๊ฑด 2) ๊ฐ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๋Š” 0 ์ด์ƒ 50 ์ดํ•˜์ด๋‹ค

์กฐ๊ฑด 3) ํ•ฉ์ณ์ง„ ํ•˜๋‚˜์˜ ์ •๋ ฌ๋œ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ํ—ค๋”๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•œ๋‹ค

 

 

์ƒ๊ฐํ–ˆ๋˜ ํ’€์ด 1 : ๋‘ ๊ฐœ์˜ ํฌ์ธํ„ฐ๋ฅผ ์ด์šฉํ•ด ํ’€์ด (59ms)

์ƒ๊ฐํ–ˆ๋˜ ํ’€์ด 2 : ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•œ ํ’€์ด(55ms)

 

 

ํ’€์ด 1

๋‘๊ฐœ์˜ ํฌ์ธํ„ฐ๋ฅผ ์ด์šฉํ•œ ํ’€์ด

 

Step1. ์˜ˆ์™ธ์ฒ˜๋ฆฌ -> ๊ฐ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ๊ธธ์ด๊ฐ€ 0์ธ ๊ฒฝ์šฐ

 

Step2. ์ฒซ ๋…ธ๋“œ์˜ ๊ฐ’์ด ๋” ์ž‘์€ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ณ‘ํ•ฉ

๊ธฐ์ค€ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ์ฒซ ๋…ธ๋“œ๋ฅผ prev, ๋‘ ๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ pointer1 ํฌ์ธํ„ฐ๋กœ ๋‚˜๋จธ์ง€ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ์ฒซ ๋…ธ๋“œ๋ฅผ pointer2 ํฌ์ธํ„ฐ๋กœ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

  • pointer1.val>=pointer2.val ์ด๋ฉด prev์™€ pointer1 ์‚ฌ์ด์— pointer2๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋…ธ๋“œ๋ฅผ ์‚ฝ์ž…
  • ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด pointer1์„ ํ•œ ์นธ ์ „์ง„

 

Step3. ๋‚˜๋จธ์ง€ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ์ค‘ ํŒ๋‹จ๋˜์ง€ ์•Š์€ ๋…ธ๋“œ๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ทธ๋Œ€๋กœ ๊ธฐ์ค€ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ๋’ท๋ถ€๋ถ„์— ๋ณ‘ํ•ฉ

 

 

Step 2 ๊ณผ์ •์„ ๊ทธ๋ฆผ์œผ๋กœ ์‚ดํŽด๋ณด์ž.

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ธฐ์ค€ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์™€, ๋‚˜๋จธ์ง€ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ,

pointer1 ๊ฐ’๊ณผ pointer2 ๊ฐ’์„ ๋น„๊ตํ•ด์„œ

  • pointer1 >=  pointer2 ์ด๋ฉด

  • pointer1 < pointer2 ์ด๋ฉด

 

 

๊ตฌํ˜„

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]:
        # Step 1 
        if list1==None:
            return list2
        if list2==None:
            return list1
		
        # Step 2
        result=None
        if list1.val<=list2.val:
            result=list1
            prev, pointer1=list1, list1.next
            pointer2=list2
        else:
            result=list2
            prev, pointer1=list2, list2.next
            pointer2=list1

        # ์ฒซ๋ฒˆ์งธ ๋ฆฌ์ŠคํŠธ์˜ ๋ ์ˆซ์ž๊ฐ€ ๋” ํผ
        while pointer1!=None and pointer2!=None:
            if pointer1.val>=pointer2.val: #pointer1 ์•ž์— ์—ฐ๊ฒฐ
                prev.next, pointer2=pointer2, pointer2.next
                prev=prev.next
                prev.next=pointer1
            else:
                prev, pointer1=prev.next, pointer1.next
        # Step 3
        if pointer2!=None:
            prev.next=pointer2
        
        return result
728x90