DAY1-Add Two Numbers[Level: Easy]

김보람's avatar
Dec 31, 2025
DAY1-Add Two Numbers[Level: Easy]

문제. 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이니까 다음값으로 리턴

Share article

김보람 | 930802qhfka@gmail.com