LeetCode 2. Add Two Numbers

개발공부를해보자·2025년 1월 12일

LeetCode

목록 보기
16/95

파이썬 알고리즘 인터뷰 문제 16번(리트코드 2번) Add Two Numbers
https://leetcode.com/problems/add-two-numbers/

나의 풀이

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
        up = 0
        dummy = ListNode(0)
        curr = dummy

        while l1 or l2 or up > 0:
            if l1 and l2:
                up, val = divmod(l1.val + l2.val + up, 10)
            elif l1:
                up, val = divmod(l1.val + up, 10)
            elif l2:
                up, val = divmod(l2.val + up, 10)
            elif up > 0:
                up, val = 0, up
            curr.next = ListNode(val)
            curr = curr.next
            if l1:
                l1 = l1.next
            if l2:
                l2 = l2.next

        return dummy.next

다른 풀이

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
        up = 0
        dummy = ListNode(0)
        curr = dummy

        while l1 or l2 or up > 0:
            val = 0
            if l1:
                val += l1.val
                l1 = l1.next
            if l2:
                val += l2.val
                l2 = l2.next
            up, val = divmod(val + up, 10)

            curr.next = ListNode(val)
            curr = curr.next

        return dummy.next

사람이 덧셈을 하는 방식을 생각해보면 어렵지 않다.
그리고 그것을 생각해보면 처음 연결리스트가 역순으로 주어진 것이 오히려 자연스럽다.
두 풀이는 본질적으로 같지만 내 풀이 보다 책 풀이가 좀 더 간결하다.

profile
개발 공부하는 30대 비전공자 직장인

0개의 댓글