DAY1-Add Two Numbers[Level: Easy]
![DAY1-Add Two Numbers[Level: Easy]](https://image.inblog.dev?url=https%3A%2F%2Finblog.ai%2Fapi%2Fog-custom%3Ftitle%3DLeetCode%2BDAY1%26tag%3DTemplate%2B1%26description%3DAdd%2BTwo%2BNumbers%2B%255BLevel%253A%2BEasy%255D%26template%3D3%26backgroundImage%3Dhttps%253A%252F%252Fsource.inblog.dev%252Fog_image%252Fdefault.png%26bgStartColor%3D%2523ffffff%26bgEndColor%3D%2523ffffff%26textColor%3D%2523000000%26tagColor%3D%2523000000%26descriptionColor%3D%2523000000%26logoUrl%3Dhttps%253A%252F%252Fsource.inblog.dev%252Flogo%252F2025-12-24T06%253A07%253A46.034Z-ddf15b75-3608-41bd-8914-cd5d2d9efc83%26blogTitle%3D&w=3840&q=75)
문제. Add Two Numbers
문제를 보면
[2.4.3] → 342,
[5,6,4] → 465
두수를 더한 807을 [7.0.8]의 형태로 리턴하라는 문제다
처음에는 배열로 생각하고 두배열중 length가 긴쪽으로 솔팅해 긴쪽부터 반복문으로 돌려 더할 생각이었다
index 0의 자리끼리 더해서 1의 자리를 만들고 10이상일경우 0을 남기고 1을 다음인덱스와 함께 더해주면 될거라고 생각했지만
/**
* @param {ListNode} l1
* @param {ListNode} l2
* @return {ListNode}
*/ListNode의 타입을 가졌다 보이는건 배열과 같아도 까보면 너무 다르다 일단 Array의 메서드들이 다통하지 않는데 forEach만 사용가능하다
array로 변환해서 사용할까 하다가 ListNode그대로 풀수있으면 굳이 변환하는 과정을 거칠 필요가 없어서 그대로 진행해보려고한다
ListNode.
{
val: <값>,
next: <다음 노드 또는 null>
}순수하게 위와 같은 형태를 가지고있고 구조를 나자신이 알고있기 때문에 index의 개념이 아닌 next로 이동한다
풀이 Code.
const l1 = [2,4,3]
const l2 = [5,6,4]
function ListNode (val, next = null) {
this.val = val
this.next = next
}
var addTwoNumbers = function(l1, l2) {
const dummy = new ListNode(0)
let current = dummy
let add = 0
while( l1 !== null || l2 !== null || add !== 0) {
const v1 = l1 ? l1.val : 0
const v2 = l2 ? l2.val : 0
const sum = v1 + v2 + add
add = Math.floor(sum / 10)
current.next = new ListNode(sum % 10)
current = current.next
if(l1) l1 = l1.next
if(l2) l2 = l2.next
}
return dummy.next
}
addTwoNumbers(l1,l2)출력의 타입이 ListNode이기 때문에 생성하는 ListNode만들고
addTwoNumbers 함수내에서 리턴될값의 더미값을 생성해둠
add는 다음 반복에서 더해질값으로 0으로 초기화
while문은 l1과 l2의 값이 있고 add가 0이 아니라면 반복함
각 listnode에서 더해질 값들을 v1, v2에 할당해주고
v1,v2,add를 더한값이 실제 리턴값이 되는데 여기서 10의자리수가 되면 10의 자리는 다음 인덱스로 넘겨야함
10의자리를 넘기기 위해 Math.floor를 사용
다음 현재 자리에는 1의 자리를 남기기위해 sum을 10으로 나눈 나머지를 ListNode로 생성
현재 current.nextdp 생성된 ListNode를 할당하고 포인터 이동
l1, l2도 값이 있다면 포인터 이동
반복이 모두 돌았다면 dummy.next로 리턴 dummy는 0이니까 다음값으로 리턴