배움 저장소

[LeetCode] 002 Add Two Numbers 본문

PS/LeetCode

[LeetCode] 002 Add Two Numbers

시옷지읏 2021. 4. 20. 12:05

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

 

Add Two Numbers - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 처음에 int형에다가 값을 저장했다가 다시 ListNode를 만들어 반환했다. 그러면 INT_MAX를 넘어서는 값이 나와서 long long 타입으로 바꾸어주었는데 그래도 long long max 를 넘는 값이 나와서 ListNode로 바로 변환해주는 방식으로 바꾸었다. 이 때 buffer를 만들어주어서 두 수의 값이 10을 넘어서면 그 다음 ListNode를 만들 때 1을 더해주었다.

  LeetCode에서 Submission 탭에 가보면 훨씬 더 간결하게 정리해놓은 코드가 있다.

    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode* dummy = new ListNode();
        ListNode* node_pointer = dummy;
        
        int buffer = 0;
        while(l1 && l2){
            node_pointer->next = new ListNode();
            int sum = l1->val + l2->val + buffer;
            buffer = 0;
            if(sum>9) buffer++;
            node_pointer->next->val = sum%10;
            l1 = l1->next;
            l2 = l2->next;
            node_pointer = node_pointer->next;
        }
        
        while(l2){
            node_pointer->next = new ListNode();            
            int sum = l2->val + buffer;
            buffer = 0;
            if(sum>9) buffer++;
            node_pointer->next->val = sum%10;
            l2 = l2->next;
            node_pointer = node_pointer->next;
        }
        
        while(l1){
            node_pointer->next = new ListNode();            
            int sum = l1->val + buffer;
            buffer = 0;
            if(sum>9) buffer++;
            node_pointer->next->val = sum%10;
            l1 = l1->next;
            node_pointer = node_pointer->next;
        }
        if(buffer>0){
            node_pointer->next = new ListNode();
            node_pointer->next->val = buffer;
        }
        return dummy->next;
    }

or 구문을 사용하여 while-loop를 돌되 괄호( 와 ?를 사용하여 sum값을 구하여 while-loop를 하나만 사용할 수 있었다. 놀랍다.

    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode* dummy = new ListNode();
        ListNode* node_pointer = dummy;
        
        int buffer = 0;
        while(l1 || l2 || buffer){
            int sum = (l1? l1->val:0) + (l2? l2->val:0) + buffer;
            buffer = sum/10;     
            node_pointer->next = new ListNode(sum%10);
            l1 = l1? l1->next : l1;
            l2 = l2? l2->next : l2;
            
            node_pointer = node_pointer->next;
        }
        return dummy->next;
    }

'PS > LeetCode' 카테고리의 다른 글

[Leet Code]055 Jump Game  (0) 2021.10.06
[Leet Code]009 Palindorme Number  (0) 2021.05.21
[Leet Code]007 Reverse Integer  (0) 2021.05.12
[Leet Code] 006 ZigZag Conversion  (0) 2021.05.10
[LeetCode] 001 Two Sum  (0) 2021.04.20
Comments