1) 신용카드의 16자리 숫자에서 맨 우측 수부터 세어 홀수 번째 수는 그대로 두고, 짝수 번째 수를 2배로 만듦
2) 2배로 만든 짝수 번째 수가 10 이상인 경우, 각 자리의 숫자를 더하고 그 수로 대체함
3) 이와 같이 얻은 모든 자리의 수를 더함
4) 그 합이 10으로 나뉘면 “정당한 번호”(유효)이고 그렇지 않으면 “부당한 번호”(유효하지 않음)로 판정
다음 공식을 이용해 주어진 신용카드의 번호가 유효한지, 유효하지 않은 지 판단하기
입력
첫째 줄에 테스트 케이스의 수 T(1 ≤ T ≤ 1000)이 주어짐
그 다음 줄부터 테스트 케이스에 해당하는 신용카드 번호가 주어짐
출력
신용카드의 번호가유효하면 “T”, 유효하지 않으면 “F”를 한 줄 씩 출력
시간 제한: 1초
메모리 제한: 128 MB
"""
입출력 예시)
3
2720992711828767
3444063910462763
6011733895106094
-> T
F
T
"""
## 의사코드 ##
# 맨 우측 수부터 세어 홀수 번째 수는 그대로 두고, 짝수 번째 수를 2배로
# => 왼쪽부터 홀수 번째 수를 2배
# 카드 번호는 총 16자리
# card = list(str(input()))
# for i in range(0, 15, 2):
# card[i] = str(int(card[i]) * 2)
# # 2배로 만든 짝수 번째 수가 10 이상인 경우, 각 자리의 숫자를 더하고 그 수로 대체
# if int(card[i]) >= 10:
# card[i] = str(sum(map(int, str(card[i]))))
# 모든 자리의 수 더하기
# total = sum(map(int, card))
# 그 합이 10으로 나뉘면 “정당한 번호”(유효)이고 그렇지 않으면 “부당한 번호”(유효하지 않음)
# print("T" if total % 10 == 0 else "F")
통과한 코드
t = int(input())
for _ in range(t):
card = list(str(input()))
# 16자리 숫자에서 맨 우측 수부터 세어 홀수 번째 수는 그대로 두고, 짝수 번째 수를 2배로 만들기 = 왼쪽부터 홀수 번째
for i in range(0, 15, 2):
card[i] = str(int(card[i]) * 2)
# 2배로 만든 짝수 번째 수가 10 이상인 경우, 각 자리의 숫자를 더하고 그 수로 대체
if int(card[i]) >= 10:
card[i] = str(sum(map(int, str(card[i]))))
# 모든 자리의 수 더하기
total = sum(map(int, card))
# 그 합이 10으로 나뉘면 “정당한 번호”(유효)이고 그렇지 않으면 “부당한 번호”(유효하지 않음)
print("T" if total % 10 == 0 else "F")