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 코드들은 나보다 코드가 짧았으나 알고리즘을 분석하기 위한 해석으로 굉장히 불편했다.
-
나의 경우 하나의 메소드에서 하나의 일을 하기 위해 리펙토링 측면으로 코드를 작성했다.