반응형
https://leetcode.com/problems/add-two-numbers/description/
재귀를 활용해 linked list 순회 및 자료구조를 만들어본 문제였습니다.
📕 풀이방법
📔 입력 및 초기화
📔 풀이과정
1. l1, l2를 순회하며 실제 숫자를 추출하는 함수 num_of_linked_list를 구현해줍니다. next가 None이 아닌 동안 loop를 수행하면서 현재 값에 10의 piv승만큼 곱한 값을 num에 더해주는 방식입니다. 해당 결과를 num에 저장합니다.
2. 주어진 num을 입력받아 reverse로 num의 일의 자리 수로 linked list를 재귀형태로 연결하여 만들어진 linked list를 반환하는 make_linked_list를 구현해줍니다. 해당 결과를 ans에 저장합니다.
3. 빈 ans라면 0 + 0을 한 형태이므로 ListNode를 새롭게 만들어 반환합니다.
📔 정답 출력 | 반환
ans를 반환합니다.
📕 Code
📔 Python3
# 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]:
def num_of_linked_list(linked_list: Optional[ListNode]):
num = 0
piv = 0
cur = linked_list
while cur:
num += cur.val * 10**piv
cur = cur.next
piv += 1
return num
def make_linked_list(n: int):
if n == 0:
return None
list_node = ListNode(n%10)
list_node.next = make_linked_list(n//10)
return list_node
num = num_of_linked_list(l1) + num_of_linked_list(l2)
ans = make_linked_list(num)
if not ans:
return ListNode()
return ans
*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.