코딩 테스트

[LeetCode] 2. Add Two Numbers - Medium

디벨로펄 2023. 2. 15.
반응형

Medium이라지만 오히려 쉬운듯 하다.

시각화? 가 잘 되어 있어서 문제 이해는 어렵지 않다.

 

문제 설명

one way의  linkedList가 아래와 같이 정의되어 있다.

순서대로

2,4,3-> 342

5,6,4-> 465

를 의미하며 342+465 = 807을 마찬가지의 형태인

7,0,8을 나타내는 listNode로 리턴해야 한다.

 

문제 풀이

딱히 풀이라고 할 것도 없다. 10이 넘어가는 경우데 대해서만 잘 처리해주면 된다.

처음에는 isOverTen이라는 boolean을 선언하여 코드를 짰는데, 

그보다는 int over 을 정의하여 이전 두 수의 합이 10이 넘을 경우 1, 아니면 0을 담도록 했다.

/**
 * 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) {
        int over=0;
        ListNode rVal  = new ListNode();
        ListNode returnNode = rVal;
        while(true){
            int val = 0;
            if(l1!=null) {
                val+=l1.val;
                l1=l1.next;
            }
            if(l2!=null){ 
                val+=l2.val;
                l2=l2.next;
            }
            // 이전 결과로부터 가져오는거지요.
            val+=over;
            over=val/10;

            rVal.val = val%10;
            if(l1==null&& l2==null && over==0) break;

            rVal.next=new ListNode();
            rVal = rVal.next;
        }

        return returnNode;
    }
}
문제 평가?

자료 구조가 주어지니 아주 편안하게 풀 수 있었다.

다른 풀이를 보니 재귀로 구현한 것도 있었다. ㄷ.ㄷ

 

※ 효율성을 위해서 l1, l2 중 null이 나오면 null 안 나온걸로 이을려고 했는데, 그럴 경우 [9,9,9,9,9]에 대해서 처리가 불가능하다는 사실..!

 

 

 

반응형

댓글