Algorithm

2. Add Two Numbers

happyMoons 2024. 1. 1. 18:08

문제

Linked List 로 구성된 2개의 값이 주어졌을때 두 Linked List 의 원소를 합친 결과를 리턴하는 문제입니다.

각 원소는 0 이상 9 이하의 한자리수 값이 존재합니다. (0 <= x <= 9)

각 원소는 한자리수만 들어갈 수 있기 때문에 10 이상의 수가 되면 다음 원소로 자리수 값을 옮겨야 합니다.

 

예를들어 아래와 같습니다.

L1 : 2 -> 4 -> 3

L2 : 5 -> 6 -> 4

 

Result : 7 -> 0 -> 8 

 

문제 풀이

public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
    ListNode dummy = new ListNode(-1);
    ListNode node = dummy;
    int temp = 0;

    while(l1 != null || l2 != null || temp > 0) {
        if(l1 != null) {
            temp += l1.val;
            l1 = l1.next;
        }

        if(l2 != null) {
            temp += l2.val;
            l2 = l2.next;
        }

        node.next = new ListNode(temp % 10);
        temp /= 10;

        node = node.next;
    }

    return dummy.next;
}

 

1. 리턴할 노드의 첫번째 위치를 리턴하기 위해 dummy 노드를 만들고,

L1 노드와 L2 노드의 값을 dummy 노드에 더해가기 위해서 node 노드를 만듭니다. 

 

2. L1 과 L2 가 null 이 아니면 temp 라는 변수에 값을 더해줍니다.

 

3. temp 변수에 있는 값을 신규 node 에 할당하는데,

10 이상의 자리수가 될 수도 있기 때문에 temp % 10 코드로 나머지 자리수만 node 에 할당합니다.

(ex. temp 값이 15 인 경우, 5만 node 에 할당.)

 

4. temp 값을 초기화 하거나 자리수를 넘기기 위해 temp /= 10 을 합니다.

예를들어, 15인 경우 temp / 10 한 값은 1 이 되고, 단순히 7인 경우 temp / 10 한 값은 0이 됩니다.

 

5. node.next 로 계속해서 반복하고, 마지막 첫번째 위치를 리턴해야하기 때문에 dummy.next 값을 리턴합니다.