본문 바로가기

컴퓨터/코테

릿코드 2 - 두 수 더하기 (리스트)

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode head = new ListNode();
        ListNode cursor = head;
        int up = 0;
        int num1, num2;
        while(l1 != null || l2 != null) {
            if(l1 == null) num1 = 0;
            else {
                num1 = l1.val;
                l1 = l1.next;
            }
            
            if(l2 == null) num2 = 0;
            else {
                num2 = l2.val;  
                l2 = l2.next;
            }
            int tmp = num1 + num2 + up;
            up = tmp / 10;
            cursor.val = tmp % 10;
            
            if(l1 == null && l2 == null){
                if(up != 0) {
                    cursor.next = new ListNode();
                    cursor = cursor.next;
                    cursor.val = up;
                }
                break;
            }
            cursor.next = new ListNode();
            cursor = cursor.next;
        }
        
        cursor = head;
        return head;
    }
}

l1, l2의 노드에서 value를 뽑고 next가 있으면 next로 옮긴다. 그 후에 덧셈 연산을 진행하고 10의 자릿수는 up 변수에 저장해두고 이후에 함께 더하도록 한다. 더하고 난 후에 l1과 l2가 null인지를 체크하여 둘 다 null이면 종료한다.

결과는 완전 평균.. ㅋㅋㅋㅋㅋㅋ 내가 생각해도 평범한 방법이다. 뭔가 특별한게 없을까.

시간복잡도와 공간복잡도가 O(n)이라 괜찮다고 생각했는데 더 효율적인 방법이 있나보다

'컴퓨터 > 코테' 카테고리의 다른 글

릿코드62 - Unique paths [dp]  (0) 2021.08.07
릿코드155 - min Stack [스택]  (0) 2021.08.07
릿코드 20 - 괄호 짝 맞추기  (0) 2021.08.05
릿코드 104 - 트리의 가장 깊은 층  (0) 2021.08.04
백준 1068 - 트리 문제  (0) 2021.08.04