leetcode - Add Two Numbers

dropKick·2020년 7월 18일
0

코딩테스트

목록 보기
11/17

두 개의 음수가 아닌 정수를 나타내는 비어 있지 않은 연결 리스트가 주어진다.
자릿수는 역순으로 저장되며 각 노드는 한 자릿수를 포함한다.
두 숫자를 추가한 후 링크된 목록으로 반환하십시오.

0이라는 숫자 자체를 제외하고 두 숫자에 선행 0이 포함되어 있지 않다고 가정할 수 있다.

풀이

  • 다른 두 연결 리스트를 더하는 문제
  • 다른 두 연결 리스트의 노드들은 각 한자리 씩만을 저장하고 있고, 이걸 다시 원하는 기준대로 정렬해야 한다.
    한 자릿수를 다시 더한다길래 merge sort가 생각남
  • 문제는 두 수가 합쳐졌을 때 자릿수를 조정하는 것
    각 단위가 10씩 바뀔 때마다 기존의 노드는 0으로 변경되고 1이 추가 되어야 한다.
    올라가는 자릿수와 0을 체크해야 함

코드

public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode answer = new ListNode(0);
        ListNode tmp = answer;
        int carry = 0;

        while (l1 != null || l2 != null) {
            int sum = carry;

            if (l1 != null) {
                sum += l1.val;
                l1 = l1.next;
            }

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

            // 자릿수 변환
            if (sum >= 10) {
                answer.next = new ListNode(sum - 10);
                carry = 1;
            } else {
                answer.next = new ListNode(sum);
                carry = 0;
            }
            answer = answer.next;
        }

        if (carry == 1) {
            answer.next = new ListNode(1);
        }
        return tmp.next;
    }
  • 자릿수 변환 때문에 고민 좀 하다 그냥 비교하고 뺐는데 다른 코드들 보니
    나머지 연산 사용했음

0개의 댓글