더하기를 구현하는 문제인데요 어렵지는 않습니다. 난이도는 Medium이네요

일의 자리부터 리스트 형태로 두 숫자가 입력되는데 반환 타입 역시 리스트로 동일하게 일의 자리부터 나오게 하면 됩니다. Carry만 잘 체크해주면 됩니다

파이썬으로 문제푸는 연습을 하고 있는데 참 익숙하지가 않네요 ;;;

class Solution(object):
    def addTwoNumbers(self, l1, l2):
        cursor1 = l1
        cursor2 = l2
        if cursor1 is None and cursor2 is None:
            return ListNode()

        head = None
        carry = 0
        while not (cursor1 is None and cursor2 is None and carry == 0):
            cursor1 = ListNode() if cursor1 is None else cursor1
            cursor2 = ListNode() if cursor2 is None else cursor2

            _sum = cursor1.val + cursor2.val + carry
            if _sum >= 10:
                carry = 1
                _sum -= 10
            else:
                carry = 0

            if head is None:
                head = ListNode(_sum)
            else:
                curr = head
                while curr.next is not None:
                    curr = curr.next
                curr.next = ListNode(_sum)

            cursor1 = cursor1.next
            cursor2 = cursor2.next

        return head

제가 푼 python2 소스입니다. 이건 그냥 보기만 하시고... 솔루션 탭에서 가장 깔끔했던 소스를 갖고와봤습니다

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution(object):
    def addTwoNumbers(self, l1, l2):
        """
        :type l1: ListNode
        :type l2: ListNode
        :rtype: ListNode
        """
        result = ListNode(0)
        result_tail = result
        carry = 0
                
        while l1 or l2 or carry:            
            val1  = (l1.val if l1 else 0)
            val2  = (l2.val if l2 else 0)
            carry, out = divmod(val1+val2 + carry, 10)    
                      
            result_tail.next = ListNode(out)
            result_tail = result_tail.next                      
            
            l1 = (l1.next if l1 else None)
            l2 = (l2.next if l2 else None)
               
        return result.next

릿코드 badrabbit 유저의 코드입니다. 참 짧고 깔끔하네요. 이런걸 pythonic이라고 하나요? 아무튼 저도 빨리 이렇게 파이썬 문법이라도 마스터를 해야겠습니다

반응형