본문 바로가기

⏳ 알고리즘/python 알고리즘 문제 풀이

리트코드 - 2. Add Two Numbers

문제

leetcode.com/problems/add-two-numbers/

 

Add Two Numbers - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

코드

1) 두 수의 합이 10이상일 경우 carry로 다음 노드에 1전달

# 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: ListNode, l2: ListNode) -> ListNode:   
        result = ListNode()
        cur = result
        
        carry = 0
        while l1 or l2 or carry:
            sum = 0
            if l1:
                sum += l1.val
                l1 = l1.next
            if l2:
                sum += l2.val
                l2 = l2.next
                
            if sum+carry >= 10:
                val = sum+carry-10
                carry = 1
            else:
                val = sum+carry
                carry = 0
                
            cur.next = ListNode(val)
            cur = cur.next
        
        return result.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: ListNode, l2: ListNode) -> ListNode:           
        result = ListNode()
        cur = result
        
        carry = 0
        while l1 or l2 or carry:
            sum = (l1.val if l1 else 0) + (l2.val if l2 else 0) + carry
            carry = 0
            if sum >= 10:
                sum -=10
                carry = 1

            l1 = l1.next if l1 else None
            l2 = l2.next if l2 else None
            cur.val = sum
            if l1 or l2 or carry:
                cur.next = (next := ListNode())
                cur = next
                
        return result

 

위 코드는 변수를 불러오는 방법에 대해 새롭게 알 수 있어서 작성해봤다.

sum = (l1.val if l1 else 0) + (l2.val if l2 else 0) + carry
또는
l1 = l1.next if l1 else None
cur.next = (next := ListNode())