BackEnd/알고리즘

leetcode 2. Add Two Numbers

악역영애 2024. 7. 31. 14:46
반응형

 

여기서 요구하는것은 각자 세로로 더하고 뒤집기.

 

일단 더해보자.

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
       ListNode node = new ListNode(0);
    }
}

 

우선 결과물을 보관할 ListNode를 선언한다. [0 -> null]

 

그리고 여기에 저장하고어쩌고하고 리턴하려고 하면 return node 할때는 node 전체를 보내는게아니라

node의 마지막에 포인터가 가있고, 마지막부분을 return 하기때문에 root를 따로 보관해준다.

 

만약 ListNode 의순서를 바꾼다거나, 파라미터로 받은 ListNode 를 변경할때에는 해당 ListNode 를 그대로 보내줘도되지만, 이렇게새로운 ListNode를 만들게 될 때는 root를 따로 보관해줘야 한다.

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
       ListNode node = new ListNode(0);
       ListNode root = node;
    }
}

 

자 이제 l1, l2를 더하게 해보자.

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
       ListNode node = new ListNode(0);
       ListNode root = node;
       
       int sum = 0;
       while (l1 != null || l2 != null) {
          if (l1 != null) {
          	sum += l1.val;
          }
          
          if (l2 != null) {
          	sum += l2.val;
          }
       }
    }
}

 

우선 이렇게 sum 에 각각의 node를 더해준다.

그리고 10의 자릿수를 넘을수도있으니까 나머지만 node에 저장해두고 넘어가자.

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
       ListNode node = new ListNode(0);
       ListNode root = 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 root.next;
    }
}

 

sum 을 10으로 나눴을때 0이 남으므로 조건도 넣어주고

node.next 에 sum을 10으로 나눈 나머지만 저장한다.

그리고 sum은 10으로 나눈값을 저장해둔다. 그러면 올림처리가 된것처럼 사용할 수 있음.

 

마지막으로 node의 포인터를 움직여준다.

 

포인터를 움직여주는 이유는,

 

최초의 node : 0 -> null

node.next = new ListNode : 0 -> sum%10 -> null

이렇게 최초의 0과 null 사이에 낑기기 때문에, next를 해줘야 sum%10 값에 포인터가 위치하게 된다.

 

또한 new ListNode를 하는이유도, sum은 단순 int 이기때문에 node에 넣으려면 저렇게 해야한다.

 

728x90