알고리즘

LeetCode in C# 2. Add Two Numbers

하길 2025. 3. 23. 14:11

 

문제 요약

단일 연결 리스트 두개가 주어지고, 숫자는 역순으로 저장되어있으며, 각 노드에는 한 자리 숫자가 포함되어있다.

두 숫자를 더한 합계를 연결 리스트로 반환해라.

 

문제 핵심

1. 단일 연결 리스트에 대한 이해

2. 계산중에 발생하는 받아올림 처리

3. 길이가 다른 리스트에 대한 예외처리

 

풀이방법

이 문제를 풀기 위해선 단일 연결 리스트에 대한 이해가 없으면 도저히 풀수 없는데, 개념은 알고 있어도 실제로 사용해본 적이 없어서 문제에 어떤식으로 적용해야할지 몰랐다. 따라서 연결리스트에 대한 공부를 다시하고, 문제를 해결했다. 이 문제는 반복해서 풀어봐야할 것 같다.

 

소요 시간 : 36분

시간 복잡도 : O(n)

public class Solution {
    public ListNode AddTwoNumbers(ListNode l1, ListNode l2) {
    
    ListNode result = new();
    ListNode head = result; // result의 Head
    int sum = 0; //두 연결 리스트의 합

    //l1,l2가 Null 이면, ListNode의 끝을 의미
    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; //다음
        }

        result.next = new ListNode(sum % 10); //다음 Node생성과 동시에 초기화
        sum /= 10; //받아올림 역할, 결과값은 다음 덧셈에 더해짐
        result = result.next; //다음
    }

    return head.next; //시작 부분을 반환
    }
}

 

코테 시작한지 2일차인데, 느낀점은 문제를 풀면서 기본기와 내실을 다질 수 있어서 좋은 것 같다.

이제 2번 문제인데 막히는게 현타가 오지만, 모르는 문제를 풀어냈을 때, 기분은 좋다. 지식의 공백이 채워지는 느낌