답안
내 풀이는 전가산기를 구현하는 것이었다.
class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
init = head = ListNode()
nxt = 0
while True:
temp = ListNode()
addition = nxt
if l1:
addition += l1.val
l1 = l1.next
if l2:
addition += l2.val
l2 = l2.next
cur = addition % 10
nxt = addition // 10
head.val = cur
if (l1 or l2) or nxt:
head.next = temp
head = head.next
else:
break
return init
while 문 종료 조건이 if문으로 결정되는데, 이 부분이 깔끔하지 못하다. 모범 답안 역시 전가산기로 구현되었는데, 약간 수정한 코드는 다음과 같다. 이 문제를 두 번째 풀었을 때는 이 방법으로 풀었다.
class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
init = head = ListNode()
round_up = 0
while l1 or l2 or round_up:
val = round_up
if l1:
val += l1.val
l1 = l1.next
if l2:
val += l2.val
l2 = l2.next
round_up, val = divmod(val, 10)
head.next = ListNode(val)
head = head.next
return init.next
변수명도 훨씬 직관적이고, temp
같은 불필요한 변수 할당이 없어서 같은 논리 구조라도 더 깔끔하게 작성이 가능하다.