ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [LeetCode] Add Two Numbers (Java)
    IT/Problem Solving 2024. 1. 4. 00:11
    반응형

    문제

    Linked List 형태로 연결된 숫자를 뒤집어 더한 후, 각각의 숫자를 뒤집어서 다시 출력하는 문제

    https://leetcode.com/problems/add-two-numbers/description/

    문제 조건 및 설명

    - 숫자 범위도 크지 않고, 0으로 시작하지 않는 숫자만을 주기 때문에,
      크게 고민하지 않고 for나 while문을 통해 접근하고 각 숫자(digit)에 대한 검증도 필요 없다.

    - 리트코드는 처음 풀어봐서 쉬운 것부터 풀어보았는데, 이런식으로 클래스 형태를 줘서 신기했다.

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode() {}
     *     ListNode(int val) { this.val = val; }
     *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
     * }
     */

    제출 코드

    class Solution {
        public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
            ListNode node = new ListNode(0);
            ListNode answer = node;
            int sum = 0;
    
            while (l1 != null || l2 != null || sum > 0) {
                if (l1 != null) {
                    sum += l1.val;
                    l1 = l1.next;
                }
    
                if (l2 != null) {
                    sum += l2.val;
                    l2 = l2.next;
                }
    
                node.next = new ListNode(sum % 10);
                sum /= 10;
    
                node = node.next;
            }
    
            return answer.next;
    
        }
    }

    풀이

    - ListNode 객체를 2개 만들어야 하는데 그 목적은 다음과 같다.
      1) node 객체 : l1, l2의 digit들을 더한 값을 node.next에 넣고 자신을 node.next로 갱신하여 합한 값을 연결시키기 위함
      2) ansewer 객체 : 최초 node의 주소값으로 shallow copy함으로써, 
                                    1)을 통해 node가 새롭게 갱신되더라도 최초의 node 주소값을 갖고 있음

    - 일반적인 덧셈의 방식과 똑같으므로, 더했을 때 10이 넘는 경우 다음 자리 숫자에 해당 값을 넘겨주는 것만 유의하면 된다.
      이를 위해, 10으로 나눴을 때 나머지를 node.nex에 저장해주고,
      몫은 그대로 sum에 남겨 다음자리 숫자들끼리 더할 때 함께 합산될 수 있도록 했다.

     

     

    문제가 좀 재밌었다! 기존에 풀던 백준이나 프로그래머스와는 또 다른 느낌...자료구조를 더 잘 익힐 수 있는 문제였던 것 같다.

    문제 자체는 쉬웠는데,,, 쉰 지 오래돼서 헷갈렸다...

    다시 개념부터 잘 잡아가야지!! 

    반응형

    댓글

Designed by Tistory.