[Java] 리트코드 - #2 Add Two Numbers (Medium)

배똥회장·2022년 11월 3일
0
post-custom-banner

📝 문제

리트코드 - #2 Add Two Numbers (Medium)


📝 답안

📌 작성코드1

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode result = new ListNode();
        
        ArrayList<Integer> n1 = createInt(l1);
        ArrayList<Integer> n2 = createInt(l2);

        ArrayList<Integer> vList = new ArrayList<>();
        int up = 0;
        for (int i = 0; i < Math.max(n1.size(), n2.size()); i++) {
            int v1 = i >= n1.size() ? 0 : n1.get(i);
            int v2 = i >= n2.size() ? 0 : n2.get(i);
            
            int v = up + v1 + v2;
            vList.add(v % 10);

            if (v >= 10) up = 1; else up = 0;            
        }
        
        if (up == 1) vList.add(1);
        
        for (int i = vList.size()-1; i >= 0; i--) {
            if (i == vList.size()-1) {
                result = new ListNode(vList.get(i));
            } else {
                result = new ListNode(vList.get(i), result);
            }
        }
        
        return result;
    }
    
    public ArrayList<Integer> createInt(ListNode n) {
        ArrayList<Integer> result = new ArrayList<>();
        while (n != null) {
            int v = n.val;
            result.add(v);
            n = n.next;
        }        
        return result;
    }
}

📌 결과1



📌 작성코드2

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode result = new ListNode();
        int up = 0;
        ListNode temp = result;

        while (l1 != null || l2 != null) {
            int num = up;
            
            if (l1 != null) {
                num += l1.val;
                l1 = l1.next;
            }
            if (l2 != null) {
                num += l2.val;
                l2 = l2.next;
            }
            
            up = num >= 10 ? 1 : 0;
            
            temp.val = num % 10;
            
            if (up == 0 && l1 == null && l2 == null) continue;
            
            temp.next = new ListNode(up);
            temp = temp.next;
        }
        
        return result;
    }
}

📌 결과2


📝 공부한 내용

ListNode 라는 것을 처음 접하는데 단순 연결 리스트 구현할 때 정말 좋을 것 같음

작성코드1과 작성코드2를 보면 코드2가 훨씬 코드가 짧고 간결하지만 런타임이나 메모리 면에서는 코드1이 더 좋은 것을 볼 수 있었고, 짧고 간결하다고 좋은 것은 아니라는 것을 다시 한번 느낌

profile
어쩌면 개발자
post-custom-banner

0개의 댓글