๋ฌธ์ ๋งํฌ : https://leetcode.com/problems/double-a-number-represented-as-a-linked-list/?envType=daily-question&envId=2024-05-07
ย
๐ฅ๏ธย ์์ํ๋ฉฐ
๊ฐ๋จํ ์ฐ๊ฒฐ ๋ฆฌ์คํธ ๋ฌธ์ ๋ค.
ย
- ๋ฐ์ ์ฐ๊ฒฐ๋ฆฌ์คํธ์์ ์ซ์๋ฅผ ๋ฌธ์์ด๋ก ํ๋ํ๋ ์ ์ฅ
- ๋ฌธ์์ด์ ์ซ์๋ก ๋ฐ๊พผ ํ, 2๋ฐฐ
- ๊ฒฐ๊ณผ๋ฌผ์ ๋ค์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ก ์ ์ฅ
class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = next class Solution: def doubleIt(self, head: Optional[ListNode]) -> Optional[ListNode]: if not head: return None # ์ซ์๋ฅผ ๋ฌธ์์ด๋ก ๋จผ์ ๋ณํ text = "" cur = head while cur: text += str(cur.val) cur = cur.next # ๋ฌธ์์ด์ ์ซ์๋ก ๋ณํํ ๋ค์ 2๋ฅผ ๊ณฑํจ doubled_num = int(text) * 2 # ๊ณฑํ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ก ๋ณํ # ๊ฒฐ๊ณผ ์ซ์๋ฅผ ๋ฌธ์์ด๋ก ๋ณํํ ๋ค์ ๊ฐ ์๋ฆฟ์๋ฅผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ ๋ ธ๋๋ก dummy_head = ListNode() cur = dummy_head for char in str(doubled_num): cur.next = ListNode(int(char)) cur = cur.next return dummy_head.next
..๋ผ๊ณ ํ๋ฉด, ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ค!
ย
ํ
์คํธ์ผ์ด์ค์์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๊ฐ ๊ต์ฅํ ๊ธด ์ผ์ด์ค๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ์, ์ด๋ ๊ฒ 2๋ฅผ ๊ณฑํ๋ ๋ฐฉ์์ผ๋ก๋ ์ค๋ฒํ๋ก์ฐ๊ฐ ์ผ์ด๋ ์ค๋ฅ๊ฐ ์๊ธด๋ค.
ย
๊ทธ๋ ๋ค๋ฉด, ์ฐ์ ๋ฆฌ์คํธ์ ์์๋ฅผ ๋ค์ง์ ํ
Carry
๋ฅผ ์ด์ฉํด ๊ณฑํ๊ธฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ฌํด ์
๋ฐ์ดํธํ๋ ๋ฐฉ์์ ์ฌ์ฉํด์ผ ํ๋ค.ย
โ๏ธย Python
class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = next class Solution: def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]: prev = None cur = head while cur: next = cur.next cur.next = prev prev = cur cur = next return prev def doubleIt(self, head: Optional[ListNode]) -> Optional[ListNode]: if not head: return None # ์ฐ๊ฒฐ๋ฆฌ์คํธ ๋ค์ง๊ธฐ head = self.reverseList(head) cur = head carry = 0 # ๊ฐ ๋ ธ๋์ ๊ฐ์ ๋ ๋ฐฐ๋ก ๋ง๋ญ๋๋ค. while cur: doubled_value = cur.val * 2 + carry cur.val = doubled_value % 10 carry = doubled_value // 10 # carry๊ฐ ๋จ์ ์๋๋ฐ ๋ ธ๋๊ฐ ๋์ด๋ฉด ํ๋ ์ถ๊ฐ if not cur.next and carry: cur.next = ListNode(carry) break cur = cur.next # ๋ค์ ๋ค์ง๊ธฐ return self.reverseList(head)
โ๏ธย C++
class Solution { public: // ๋ฆฌ์คํธ ๋ค์ง๊ธฐ ํจ์ ListNode* reverseList(ListNode* head) { ListNode *prev = nullptr; ListNode *cur = head; while (cur != nullptr) { ListNode *next = cur->next; cur->next = prev; prev = cur; cur = next; } return prev; } // ๋ฆฌ์คํธ ๋ ๋ฐฐ๋ก ๋ง๋ค๊ธฐ ํจ์ ListNode* doubleIt(ListNode* head) { if (head == nullptr) { return nullptr; } // ๋ฆฌ์คํธ ๋ค์ง๊ธฐ head = reverseList(head); ListNode *cur = head; int carry = 0; // ๋ ธ๋๋ฅผ ์ํํ๋ฉด์ ๊ฐ์ ๋ ๋ฐฐ๋ก ๋ง๋ค๊ธฐ while (cur != nullptr) { int doubled_value = cur->val * 2 + carry; cur->val = doubled_value % 10; carry = doubled_value / 10; // ๋ง์ง๋ง ๋ ธ๋์ด๊ณ ์บ๋ฆฌ๊ฐ ๋จ์์๋ค๋ฉด ์ ๋ ธ๋ ์ถ๊ฐ if (cur->next == nullptr && carry) { cur->next = new ListNode(carry); break; } cur = cur->next; } // ๋ค์ ๋ฆฌ์คํธ๋ฅผ ๋ค์ง์ด ์๋ ์์๋ก ๋ณต๊ตฌ return reverseList(head); } };
ย
ย
๐ย ์๊ฐ
๋ค์ง๋๋ค๋ ๋ฐ์์ ๋ ์ฌ๋ฆฌ๋ ๊ฒ ์ด์ง ์ด๋ ค์ ๋ค.
ย
๐ย ๋ถ๋ก
๐ย ์ฐธ๊ณ ๋ฌธํ
ย
๋๊ธ