[LeetCode - 002] Add Two Numbers

koyo·2020년 10월 8일
0

LeetCode

목록 보기
2/3
post-thumbnail

문제

문제링크
LinkedList 형태로 두 개의 수가 주어진다.
이들의 합을 LinkedList 형태로 표현하라.

문제풀이

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
def Casting(l: ListNode) -> int:
        # ListNode로 주어진 값을 Int로 변환
        num, i = 0, 1
        while l:
            num += l.val * i
            l = l.next
            i *= 10
        return num

class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        # 변환한 값의 합
        temp = Casting(l1) + Casting(l2)
        # LinkedList의 시작
        answer = ListNode()
        # LinkedList의 끝
        last = answer
        while True :
             # 나머지 수
             last.val = temp % 10
             # Carry(올림 수)
             temp //= 10
             # 끝이 아니면 뒷처리를 위해 ListNode() 추가
             if temp != 0:
                 last.next = ListNode()
                 last = last.next
             else :
                 break
        return answer

LeetCode Solution

class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        # 답안은 이 다음부터 시작
        dummyHead = ListNode()
        # 현재위치(마지막)
        curr = dummyHead
        # 올림 수
        carry = 0
        while l1 or l2:
            x = 0 if l1 l1.val
            y = 0 if l2 l2.val
            # 합
            temp = carry + x + y
            # 올림
            carry = temp // 10
            # 나의 답안과 다른 부분(뒷 자리를 먼저 만들지 않음)
            curr.next = ListNode(temp % 10)
            
            curr = curr.next
            # l1에 남은 수가 있는가
            if l1 :
                l1 = l1.next
            # l2에 남은 수가 있는가
            if l2 :
                l2 = l2.next
        # 올림 수가 남았다면 한 자리 추가
        if carry > 0:
            curr.next = ListNode(carry)
        
        # dummyHead의 다음부터 시작
        return dummyHead.next

정리

뒤에 한자리를 먼저 넣어주니 이를 제거하는 방법을 찾다가 시간을 다 보낸 것 같다. Python의 del 함수로는 메모리 영역 해제가 되지 않는다.
그리고 answer.next를 반환하면 되는데 이걸 깔끔하게 하고싶어서 이리저리 생각해봤는데 시간을 낭비하는 요인이 된 것 같다.

알게된 점
Python의 del은 변수를 제거할 뿐, 메모리 영역을 해제하지 않습니다.
관련 링크

profile
클라우드 개발자가 될 코요입니다.

0개의 댓글