티스토리 뷰

dev/java

릿코드(LeetCode) - Add Two Numbers

IT's me 2019. 4. 13. 00:00

LeetCode.com

1) 릿코드(leetcode.com) 간략 소개

릿코드(leetcode.com)는 여러가지 코딩 언어로 1,000가지가 넘는 알고리즘 문제를 풀어볼 수 있는 알고리즘 풀이 사이트라고 할 수 있다. 문제도 계속해서 추가되고 있다.

 

 

LeetCode - The World's Leading Online Programming Learning Platform

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

문제의 양이 방대하고 종류가 많아서 개발자가 되기 위한, 혹은 이직을 하려는 개발자가 코딩 면접, 코딩 테스트를 통과하기 위해 연습하는 사이트로 많이 활용되고 있다.

 

물론 비슷한 사이트가 많은데 코딜리티(codility.com)나 프로그래머스(https://programmers.co.kr) 정도가 국내에서는 많이 활용되는 사이트인것 같고 얘기해주고 싶은 것은 한가지의 사이트만 참고하지 말고 여러가지 사이트를 참고하여 연습하는게 좋은 결과가 있으리라고 추천해주고 싶다. 

2) Add Two Numbers 풀이

요즘 코딩을 잘 안하니 감을 잃는 거 같아 알고리즘 비스무리한 사이트에서 조금씩 코딩을 해야겠다는 생각이 들어 조금씩 해보려고 한다. 난이도 중간이라고 하는 링크드리스트로 된 두 숫자를 더하는 문제다. 몇번 짜다 보면 쉽게 만들수 있다.

package problems.n2.Add_Two_Numbers;

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
    	ListNode resultNode = null;
    	ListNode nextNode = null;
    	int carry = 0;
    	while( l1 != null || l2 != null  || carry > 0){    		
    		int newVal = (l1 != null ? l1.val : 0) + (l2 != null ?l2.val:0) + carry;
    		carry = 0;
    		if( newVal >= 10){
    			carry = 1;
    			newVal = newVal - 10;
    		}
    		if( resultNode == null ){
    			resultNode = new ListNode( newVal );
    			nextNode = resultNode;
    		}    			
    		else {
    			nextNode.next = new ListNode( newVal );
    			nextNode = nextNode.next;
    		}
    		l1 = (l1 != null ? l1.next : null);
    		l2 = (l2 != null ? l2.next : null);
    	}    	
        return resultNode;
    }
    
    
    public static void main(String[] args) {
    	ListNode l1 = new ListNode(2);
    	l1.next = new ListNode(4);
    	l1.next.next = new ListNode(3);
    	
    	ListNode l2 = new ListNode(5);
    	l2.next = new ListNode(6);
    	l2.next.next = new ListNode(4);
    	
    	ListNode ln = addTwoNumbers(l1, l2);
    	
    	while( ln != null ){
    		System.out.println(ln.val);
    		ln = ln.next;
    	}
	}
}

class ListNode {
    int val;
    ListNode next;
    ListNode(int x) { val = x; }
}

문제가 이해가 되면 쉽게 짜는데... 문제가 이해가 안되는게 많다. 머리가 나빠서 ㅎㅎㅎ 일주일에 5개씩은 할 수 있도록 하고 싶다.


댓글
최근에 올라온 글
최근에 달린 댓글