Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

소소한 개발자

[백준] 14726 - 신용카드 판별 본문

온라인 저지/백준

[백준] 14726 - 신용카드 판별

rrrmaster 2021. 8. 6. 02:17

문제 링크

14726번: 신용카드 판별 (acmicpc.net)

 

14726번: 신용카드 판별

신용카드는 총 16자리의 숫자로 구성되어 있다. 언뜻 보기에는 무작위로 된 숫자로 구성되어 있는 것 같이 보이지만 그 속에는 하나의 수학적 비밀이 숨겨져 있다. 그중 하나가 카드 번호가 유효

www.acmicpc.net

 

코드 

#include <iostream>

bool isluhn(long long int number)
{
	int sum = 0;
	for (int i = 0; number > 0; i++)
	{
		int temp = (number % 10) * (i % 2 == 0 ? 1 : 2);
		sum += temp % 10 + temp / 10;
		number /= 10;
	}
	return sum % 10 == 0;
}
int main()
{
	int n;
	std::cin >> n;
	while (n--)
	{
		long long int card;
		std::cin >> card;
		std::cout << (isluhn(card) ? "T" : "F") << '\n';
	}
}

풀이 해설

룬 알고리즘 - 위키백과, 우리 모두의 백과사전 (wikipedia.org)

 

룬 알고리즘 - 위키백과, 우리 모두의 백과사전

룬 알고리즘(Luhn algorithm)은 신용카드 번호 검증에 사용되는 알고리즘이다. 이 알고리즘은 지식재산권의 보호기간이 끝난 퍼블릭 도메인 저작물에 속하며 오늘날 널리 사용되고 있다. ISO/IEC 7812-1

ko.wikipedia.org

이 문제는 룬 알고리즘이라는 특이한 알고리즘을 사용해봤다.

실제 카드 번호를 판별할때 쓰인다 카더라 

 

룬 알고리즘 공식은

1.오른쪽에서 번호를 세며 숫자를 더한다.

2.더할때 2의 배수 자리들은 곱하기 2를 한다.

3.만약 곱하기 2를 한 숫자가 10이상이면 10의 자리와 1의 자리로 더한다 

4.위 과정이 다 끝나고 최종적으로 더한 숫자가 10의 배수이면 아니면 거짓

 

백준 예제 입력에 있는

2720992711828767를 예를 들면

1. 7부터 숫자를 센다.

=> 2 + 7 + 2 + 0 + 9 + 9 + 2 + 7 + 1 + 1 + 8 + 2 + 8 + 7 + 6 + 9

 

2.더할때 2의 배수 자리들은 곱하기 2를 한다.

=> (2 * 2) + 7 + (2 * 2) + 0 + (9 * 2) + 9 + (2 * 2) + 7 + (1 * 2) + 1 + (8 * 2) + 2 + (8 * 2) + 7 + (6 * 2) + 7

 

3.만약 곱하기 2를 한 숫자가 10이상이면 10의 자리1의 자리로 더한다 

=> 4 + 7 + 4 + 0 + (1 + 8) + 9 + 4 + 7 + 2 + 1 + (1 + 6) + 2 + (1 + 6) + 7 + (1 + 2) + 7

 

4.위 과정이 다 끝나고 최종적으로 더한 숫자가 10의 배수이면  아니면 거짓

=>80 % 10 == 0

=>참

 

'온라인 저지 > 백준' 카테고리의 다른 글

[백준] 1388 - 바닥 장식  (0) 2021.08.05
[백준] 14730 - 謎紛芥索紀 (Small)  (0) 2021.08.05
[백준] 13771 - Presents  (0) 2021.08.01
[백준] 2959 - 거북이  (0) 2021.08.01
[백준] 17608 - 막대기  (0) 2021.08.01
Comments