ํ์ด์ฌ์์ ๋งํฌ๋ ๋ฆฌ์คํธ ํ์ ์ธ์๋ก ์ ๋ฌํด์ ๋ฉ์๋ ํธ์ถํ๊ธฐ
headData = ListNode(1,
ListNode(2,
ListNode(3,
ListNode(4,
ListNode(5, None)))))
# reorderList ํธ์ถ
solution = Solution()
solution.reorderList(headData)
๋๋ฒ๊น
๋ด๊ฐ ์ฒ์์ ํ๋๋ 18์งธ์ค์ ์๊ฐํด๋ด์ง ๋ชปํ์๋๋ฐ, 18๋ฒ์งธ ์ค์ ๋นผ๋จน๊ณ runํ์๋ Memory Limit Exceeded ๊ฐ ๋์จ๋ค๋ ๊ฒ์ด์๋ค. ๋์ ํ ์ Memory Limit ์ด๊ณผ๊ฐ ๋์ค๋์ง๋ ์ดํดํ๊ธฐ ์ด๋ ค์ ์ด์ ๋๋ฒ๊น ํด๋ณธ ๋ด์ฉ์ ํฌ์คํ ํ๋ค.
์ด์
head๋ฅผ slow.next = None ์ผ๋ก ๋์ด์ฃผ์ง ์์ผ๋ฉด
๊ฒฐ๊ตญ `head` ๋ 1->2->3->4->None ๊ฐ์ ๊ฐ์ง๊ณ
๋ท๋ถ๋ถ์ ๋ค์ง๊ณ ๋ `secondNext` ๋ 5->4->None ๊ฐ์ ๊ฐ์ง๊ฒ ๋๋ฌธ์
์ฒซ ๋ถ๋ถ๊ณผ ๋ท ๋ถ๋ถ์ ํ๋์ฉ ๊ฐ์ ธ์์ ์ฐจ๋ก๋ก ๋จธ์งํ ๋ 1 - 5 - 2 - 4 - 3 - 4- 3 - 4- 3 - 4 - ......
์ด๋ ๊ฒ ๋ฌดํ ๋ฃจํ์ ๋น ์ง๊ฒ๋์ด ๋ฆฌํธ์ฝ๋์์ ๋๋ฆด๋ Memory Limit Exceeded ๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค.
์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์ฒซ๋ถ๋ถ์ 3.next ๋ 4๊ฐ ๋๊ณ , 4.next ๋ 3์ด ๋๊ธฐ ๋๋ฌธ์ ์ฒซ ๋ถ๋ถ๊ณผ ๋๋ฒ์งธ ๋ถ๋ถ์ ๋จธ์งํ๋ ์ฝ๋์ 31๋ฒ์งธ while ๋ฌธ์์ ๋ฌดํ ๋ฃจํ์ ๋น ์ง๊ฒ ๋๋ค.
ํด๊ฒฐ
์ด๋ ๊ธฐ์ head๋ฅผ ์๋ถ๋ถ๊น์ง ์๋ฅด๊ธฐ์ํด์ slow.next = None ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ์ด์ผํ๋ค.
์ฆ, ๋๋ฒ์งธ second half ๋ฅผ ๋ง๋ ์ดํ์ ๋ฐ๋ก ์ฒซ๋ฒ์งธ half๊ฐ ๊ฐ๋ฆฌํค๊ณ ์๋ ๋ง์ง๋ง ๋ ธ๋๋ฅผ None ์ผ๋ก ๊ฐ๋ฆฌ์ผ์ first half์ second half ๋ฅผ ๋๋๋ค.
slow.next = None ์ฒ๋ฆฌ๋ฅผ ํ๊ณ ๋ ์ดํ์ second half ๋ฅผ ๋ค์ง์ด์ฃผ๋ ์ฝ๋๋ฅผ 25๋ฒ์งธ ์ค๊น์ง ์คํํ๊ณ ๋๋ฉด ์ ์บก์ฒ์ฒ๋ผ ์ฒซ๋ฒ์งธ๋ถ๋ถ์ ๋ง์ง๋ง ๋ ธ๋.next๋ None ์ผ๋ก ๋๋๊ณ , ๋๋ฒ์งธ ๋ถ๋ถ์ ๋ง์ง๋ง๋ ธ๋.next๋ None ์ผ๋ก ๋๋จ์ ๋ณผ ์์๋ค.
์ด์ ์ด ๋ ๋ถ๋ถ์ ๋ ธ๋๋ฅผ ํ๋์ฉ mergeํ๋ฉด second ๊ฐ None์ด ๋ ๋๊น์ง ์ ๋จธ์ง๋จ์ ํ์ธํ ์ ์๋ค.
'Problem Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
letter mapping. finding if each substring's sum is divisible by its length (2) | 2025.06.18 |
---|---|
linked list์์ ๋ง์ง๋ง์์ n๋ฒ์งธ ๋ ธ๋ ์ฐพ๊ธฐ (0) | 2025.04.23 |