문제 링크입니다:
알고리즘 설명이 다 되어있기 때문에 그대로 코드만 작성해주면 됩니다.
/*
Lune 알고리즘은 신용카드의 번호가 맞는지 확인할 때 쓰인다.
최대 16자리 숫자가 주어졌을 때 카드 번호가 맞으면 true 틀리면 false를 반환하시오
알고리즘은 다음과 같다:
1.자릿수가 홀수이면 홀수번째 숫자들에 2를 곱한다
자릿수가 짝수이면 짝수번째 숫자들에 2를 곱한다.
2.두배를 했을 때 해당 숫자가 9를 넘긴다면 각 자릿수끼리 더하거나 해당 숫자에서 9를 뺀다
3.모든 자릿수의 숫자를 더한다.
4.10으로 나누었을 때 나머지가 0이면 true, 그 외의 경우 false이다
*/
#include <iostream>
#include <vector>
using namespace std;
class Kata{
public:
static bool validate(long long int n);
};
bool Kata::validate(long long int n)
{
long long int temp = n;
std::vector<int> v;
while (temp > 0)
{
v.push_back(temp % 10);
temp /= 10;
}
for (int i = 1; i < v.size(); i += 2) //거꾸로 했을 떄 짝수번째 자릿수에만 2를 곱하면된다
{
v[i] *= 2;
if (v[i] > 9)
v[i] -= 9;
}
int sum = 0;
for (int i = 0; i < v.size(); i++)
sum += v[i];
if (sum % 10)
return false;
else
return true;
}
int main(void)
{
cout << Kata::validate(891) << endl;
cout << Kata::validate(2121) << endl;
return 0;
}
개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
'알고리즘 > codewars' 카테고리의 다른 글
codewars: RGB To Hex Conversion (0) | 2018.02.07 |
---|---|
codewars: Fun with trees: is perfect (0) | 2018.02.06 |
codewars: Playing on a chessboard (0) | 2018.02.01 |
codewars: Tank Truck (0) | 2018.01.30 |
codewars: Statistics for an Athletic Association (0) | 2018.01.30 |