[Leetcode] 2. Add Two Numbers โ
Problem โ
๋๊ฐ์ ๋งํฌ๋ ๋ฆฌ์คํธ(LinkedList)๊ฐ ์ฃผ์ด์ง๋ค. ๋งํฌ๋๋ฆฌ์คํธ๋ ์ซ์๋ฅผ ์ญ๋ฐฉํฅ์ผ๋ก ๊ฐ๋ฅดํค๊ณ ์๋ค. ๋๊ฐ์ ๋งํฌ๋ ๋ฆฌ์คํธ์ ํฉ์ ๊ตฌํ๊ณ ๊ตฌํ ๊ฐ์ ๋งํฌ๋ ๋ฆฌ์คํธ๋ก ๋ฆฌํดํ๋ ๋ฌธ์ .
์ฌ๊ธฐ์๋ ๋งํฌ๋๋ฆฌ์คํธ๋ฅผ ListNode๋ก ๊ตฌํํด๋์.
js
// exam )
linkedList : 2 -> 4 -> 3 // 342
Solution โ
Linked list๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฌธ์ .
์ซ์์ ๋ฒ์๊ฐ ๋งค์ฐ ๊ธธ์ด BigInt๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฅผ ๊ณ์ฐ 10์ผ๋ก ๋๋ ๋๋จธ์ง๊ฐ์ ๋ ธ๋ ๋ฐ์ดํฐ(ListNode)๋ก ๋ง๋ค๊ณ head ๋ ธ๋์ ์ฐ๊ฒฐํจ.
- ํ๋ผ๋ฉํ๋ก ๋ด๋ ค์จ ๋ ธ๋๋ฅผ ์ซ์๋ก ๋ฐ๊พธ๋ ์์ .
- ์ซ์๋ก ๋ฐ๊พผ ๋ ๊ฐ์ ๋ํจ
- ํฉํ ๊ฐ์์ 10์ ๋๋จธ์ง๋ฅผ head ๋ ธ๋์ ์ฐ๊ฒฐ. ๊ทธ๋ฆฌ๊ณ ํฉํ ๊ฐ์ 10์ฉ ๋๋ ์ฃผ๋ฉด์ ์๋ฆฟ์๋ฅผ ์ค์.
- head ๋ ธ๋์ temp๋ฅผ ์ด์ฉํ์ฌ ๊ฐ์๋ค ์ด์ด๋ถ์.
- head ๋ ธ๋์ ์ญํ ์ ์ฒซ๋ฒ์งธ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋ฅดํค๋ ์ญํ
JS Code โ
javascript
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} l1
* @param {ListNode} l2
* @return {ListNode}
*/
var addTwoNumbers = function(l1, l2) {
return toNode(
toBigNumber(l1) + toBigNumber(l2)
)
};
const toBigNumber = (node) => {
let sum = 0n;
let digit = 1n
let temp = node
while(temp) {
sum += BigInt(temp.val) * digit
temp = temp.next
digit *= 10n
}
return sum
}
const toNode = (num) => {
if (num === 0n) return new ListNode(0)
let head = new ListNode()
let temp = new ListNode()
while(num > 0) {
const last = num % 10n
temp.next = new ListNode(last)
if (!head.next) head.next = temp.next
num /= 10n
temp = temp.next
}
return head.next
}