CodeWars 쉰 아홉 번째 문제

Updated:

Validate Credit Card Number

public static boolean validate(String n) {
    n = new StringBuilder(n).reverse().toString();
    return sumOfN(n) % 10 == 0;
}

public static int sumOfN(String n) {
    int sum = 0;

    for(int i = 0; i < n.length() ; i++) {

        int number = Integer.parseInt(n.substring(i,i+1));

        if(i % 2 == 1) {
            sum += even(number);
        } else {
            sum += number;
        }
    }

    return sum;
}

private static int even(int number) {

    int doubleNumber = number * 2;

    if(doubleNumber < 10) {
        return doubleNumber;
    }

    return sumOfOwn(doubleNumber);
}

private static int sumOfOwn(int doubleNumber) {		
    return doubleNumber / 10  + doubleNumber % 10;
}
  • 이번 문제는 신용카드에서 실제 쓰이고 있는 룬 알고리즘을 묻는 문제였다.

  • 참고 : https://en.wikipedia.org/wiki/Luhn_algorithm

  • 알고리즘은 쉬워서 쉽게 풀었다.

  • Best 코드들은 나보다 코드가 짧았으나 알고리즘을 분석하기 위한 해석으로 굉장히 불편했다.

  • 나의 경우 하나의 메소드에서 하나의 일을 하기 위해 리펙토링 측면으로 코드를 작성했다.