๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿงฉ Algorithm/๊ตฌํ˜„

[LeetCode] 2181๋ฒˆ: ๊ธฐ์กด ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ์ˆ˜์ •ํ•˜๊ธฐ

by HelloRabbit 2023. 4. 30.
728x90

Hint

1. ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ํฌ์ธํ„ฐ 2๊ฐœ๋ฅผ ์ด์šฉํ•ด์„œ ๊ธฐ์กด ๋ฆฌ์ŠคํŠธ๋ฅผ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋กœ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์„๊นŒ?
2. ํฌ์ธํ„ฐ 1๊ฐœ๋Š” ์ˆ˜์ •ํ•˜๋Š” ๋…ธ๋“œ ์œ„์น˜์— (a), ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ๋ฆฌ์ŠคํŠธ ์ „์ฒด๋ฅผ ํ™•์ธํ•˜๋Š” ์šฉ๋„(b)๋กœ ์ด์šฉํ•ด๋ณด์ž!
3. ์›€์ง์ด๋Š” ํฌ์ธํ„ฐb๊ฐ€ ๊ทธ ๋‹ค์Œ 0์— ๋„๋‹ฌํ•  ๋•Œ๊นŒ์ง€ ์ˆซ์ž๋“ค์„ ์ˆ˜์ •ํ•˜๋Š” ํฌ์ธํ„ฐa ์œ„์น˜์— ๋”ํ•˜๋ฉด ๋œ๋‹ค.
4. ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๋Š” null์— ์—ฐ๊ฒฐ๋˜๋„๋ก ๋ฐ”๊ฟ”์•ผํ•œ๋‹ค.

 

LeetCode 2181๋ฒˆ: Merge Nodes in Between Zeros (ํ’€์–ด๋ณด๊ธฐ)

class Solution:
    def mergeNodes(self, head: Optional[ListNode]) -> Optional[ListNode]:
        # ํฌ์ธํ„ฐ 2๊ฐœ ๋งŒ๋“ค๊ธฐ
        # now = ๋ง์…ˆํ•  ํฌ์ธํ„ฐ ์œ„์น˜
        # pointer = ๋ฆฌ์ŠคํŠธ ์ „์ฒด๋ฅผ ํ™•์ธํ•  ํฌ์ธํ„ฐ ์œ„์น˜
        now = pointer = head
        
        # pointer๋กœ ๋ฆฌ์ŠคํŠธ ์ „์ฒด ํ™•์ธํ•˜๊ธฐ
        while pointer.next:
            pointer = pointer.next
            
            # 0์ด ์•„๋‹Œ ์ˆซ์ž๋ฉด now ์œ„์น˜์— ์ˆซ์ž๋ฅผ ๋”ํ•ด์ฃผ๊ธฐ
            if pointer.val != 0:
                now.val += pointer.val
            
            # 0์ด๋ฉด now ์œ„์น˜ ์˜ฎ๊ฒจ์ฃผ๊ธฐ
            else:
                if pointer.next:
                    now = now.next
                    now.val = 0
                # pointer๊ฐ€ ๋ฆฌ์ŠคํŠธ ๋์— ๋„๋‹ฌํ–ˆ๋‹ค๋ฉด now์˜ ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ None์œผ๋กœ ํ•ด์ฃผ์–ด ๋‚˜๋จธ์ง€ ๋ฆฌ์ŠคํŠธ ๋Š์–ด๋‚ด๊ธฐ
                else:
                    now.next = None
        
        # now ํฌ์ธํ„ฐ๋กœ ๋ณ€๊ฒฝํ•œ head ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ
        return head

 

 

 

 

๋Œ“๊ธ€