백준 14726 신용카드 판별
문제
신용카드는 총 16자리의 숫자로 구성되어 있다. 언뜻 보기에는 무작위로 된 숫자로 구성되어 있는 것 같이 보이지만 그 속에는 하나의 수학적 비밀이 숨겨져 있다. 그중 하나가 카드 번호가 유효 한지 유효하지 않은 지 검사하는 Luhn 공식이다. 그 공식은 다음과 같다.
- 신용카드의 16자리 숫자에서 맨 우측 수부터 세어 홀수 번째 수는 그대로 두고, 짝수 번째 수를 2배로 만든다.
- 2배로 만든 짝수 번째 수가 10 이상인 경우, 각 자리의 숫자를 더하고 그 수로 대체한다.
- 이와 같이 얻은 모든 자리의 수를 더한다.
- 그 합이 10으로 나뉘면 “정당한 번호”(유효)이고 그렇지 않으면 “부당한 번호”(유효하지 않음)로 판정된다.
다음 공식을 이용해 주어진 신용카드의 번호가 유효한지, 유효하지 않은 지 판단해라.
입력
첫째 줄에 테스트 케이스의 수 T(1 ≤ T ≤ 1000)이 주어진다.
그 다음 줄부터 테스트 케이스에 해당하는 신용카드 번호가 주어진다.
출력
신용카드의 번호가 유효하면 “T”, 유효하지 않으면 “F”를 한 줄 씩 출력한다.
예제 입력 1
3
2720992711828767
3444063910462763
6011733895106094
예제 출력 1
T
F
T
풀이 과정
뒤에서부터 세지만 입력의 길이는 짝수이기 때문에 앞부터 진행해도 무관하다.
인덱스가 짝수이면 해당 숫자를 정수로 변환해 두 배를 한다.
10 이상이면 각 자리수를 변수 total에 누적한다.
미만이면 그냥 누적한다.
인덱스가 홀수이면 정수로 변환해 그냥 누적한다.
이 total의 값이 10의 배수이면 T를 출력한다.
코드
T = int(input())
for _ in range(T):
card = input()
total = 0
for i, num in enumerate(card):
if i % 2 == 0:
tmp = int(num) * 2
if tmp >= 10:
total += tmp // 10 + tmp % 10
else:
total += tmp
else:
total += int(num)
if total % 10 == 0:
print('T')
else:
print('F')
Author And Source
이 문제에 관하여(백준 14726 신용카드 판별), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@mynote/백준-14726-신용카드-판별저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)