반응형

문제 출처 :


https://leetcode.com/problems/add-two-numbers/submissions/



알고리즘 분석 :


문제 해결에 필요한 사항

1. 구현



우선 리스트 길이가 서로 다를 수 있으니 l1, l2중 더 긴 리스트의 크기를 최대로 잡아두고 시작한다.


이때 carry를 이용하여 합이 10이상이면 다음 자리수로 올림해준다.


마지막으로 for문 탈출 후 아직도 carry가 있으면 1을 추가해주고 return






소스 코드 : 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
 
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
 
class Solution:
    def getSize(self, cList):
        ret = 0
        while cList != None:
            ret += 1
            cList = cList.next
            
        return ret
        
    def addValue(self, ret, i, cList):
        if cList != None:
            ret[i] += cList.val
            return cList.next
        return cList
    
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
 
        len1 = self.getSize(l1)
        len2 = self.getSize(l2)
        
        ret = [0]*max(len1,len2)
        carry = False             
        
        for i in range(0len(ret)):
            if carry:
                ret[i] += 1
                carry = False
            
            l1 = self.addValue(ret, i, l1)
            l2 = self.addValue(ret, i, l2)
            
            if ret[i] >= 10:
                ret[i] -= 10
                carry = True
            
        if carry:
            ret.append(1)
        
        return ret
            
cs

반응형