[LeetCode] #2. Add Two Numbers

nayeoniee·2021년 9월 4일
0

Algorithm

목록 보기
19/29
post-thumbnail

#2. 두 수의 덧셈

문제

문제 링크

두 연결 리스트 l1=[2,4,3], l2=[5,6,4]가 주어졌을 때 각 연결 리스트의 요소들을 거꾸로 연결해 342, 465를 만든 후 더한 결과 807을 다시 역순으로 만든 연결 리스트를 반환해라.

풀이

1) 연결 리스트 l1, l2의 역순을 구한다. => rev1, rev2
2) 역순 연결 리스트의 val만 연결한다. => str1, str2
3) 두 연결 리스트의 val을 더한다. => sum
4) 문자열 sum의 각 자리로 이루어진 연결리스트를 만든다. sum을 리스트로 만든 후, 리스트를 다시 연결 리스트로 만들었다. => res_node
5) res_node의 역순을 구한다. => rev_node

코드

전체 코드

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

class Solution:
    def reverseList(self, head: ListNode):
        prev, curr = None, head

        while curr:
            next = curr.next
            curr.next = prev
            prev = curr
            curr = next
        return prev

    def list2node(self, list) -> ListNode:
        new_node = ListNode()
        curr = new_node
        for i in range(len(list)):
            curr.next = ListNode(list[i])
            curr = curr.next

        return new_node.next

    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        str1, str2 = '', ''
        rev1 = self.reverseList(l1)
        rev2 = self.reverseList(l2)

        while rev1:
            str1 += str(rev1.val)
            rev1 = rev1.next
        while rev2:
            str2 += str(rev2.val)
            rev2 = rev2.next

        sum = str(int(str1) + int(str2))
        sum_list = []
        for i in range(len(sum)):
            sum_list.append(int(sum[i]))
        print("sum_list: ", sum_list)
        res_node = self.list2node(sum_list)
        rev_node = self.reverseList(res_node)

        return rev_node

ListNode 클래스 : 연결 리스트는 값 val과 다음 노드를 가리키는 next로 이루어진다.

reverseList() : 이전 역순 연결 리스트를 구하는 포스팅에서 구현한 함수와 동일하다.

list2node() : 리스트의 요소로 이루어진 연결 리스트를 만든다.
나는 두 연결 리스트의 val를 더하기 위해 val을 str로 변환해 연결한 후 정수형으로 만들어 더했다. 더한 결과를 순서대로 int -> str -> list -> ListNode로 변환했다.

profile
정말 할 수 있어!

0개의 댓글