티스토리 뷰

백준

BOJ]14726번_신용카드 판별

Pican 2019. 5. 28. 00:59

문제:신용카드는 총 16자리의 숫자로 구성되어 있다. 언뜻 보기에는 무작위로 된 숫자로 구성되어 있는 것 같이 보이지만 그 속에는 하나의 수학적 비밀이 숨겨져 있다. 그중 하나가 카드 번호가 유효 한지 유효하지 않은 지 검사하는 Luhn 공식이다. 그 공식은 다음과 같다.

  1. 신용카드의 16자리 숫자에서 맨 우측 수부터 세어 홀수 번째 수는 그대로 두고, 짝수 번째 수를 2배로 만든다.
  2. 2배로 만든 짝수 번째 수가 10 이상인 경우, 각 자리의 숫자를 더하고 그 수로 대체한다.
  3. 이와 같이 얻은 모든 자리의 수를 더한다.
  4. 그 합이 10으로 나뉘면 “정당한 번호”(유효)이고 그렇지 않으면 “부당한 번호”(유효하지 않음)로 판정된다.

다음 공식을 이용해 주어진 신용카드의 번호가 유효한지, 유효하지 않은 지 판단해라.

 

풀이:

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
32
33
34
35
36
37
38
39
40
41
42
#include<stdio.h>
 
int main()
{
    int n;
    int num;
    int sum, cnt;
    char card[17];
 
    scanf("%d"&n);
 
    while (n--) {
        sum = 1, cnt = 0;
        
        memset(card,'\0',sizeof(card));
        
        scanf("%s", card);
 
        for (int i = 15; i >=  0; i--) {
            if (sum % 2 == 1) {
                cnt += card[i] - '0';
            }
            else {
                num  = (card[i] - '0'* 2;
                if (num >= 10) {
                    cnt += (num / 10+ (num % 10);
                }
                else {
                    cnt += num;
                }
            }
            sum++;
        }
        if (cnt % 10 == 0) {
            printf("T\n");
        }
        else {
            printf("F\n");
        }
    }
}
 
cs

 

먼저 n에 테스트 케이스를 받는다.

반복문안에선 테스트케이스만큼 반복하고

카드번호를 받고, 또 반복문으로 카드길이만큼 실행한다.

짝수와 홀수를 구분하고 cnt부분에 최종수를 저장,

10으로 나뉘면 T 아니면 F를 출력한다.

 

'백준' 카테고리의 다른 글

BOJ]3035번_스캐너  (0) 2019.06.03
BOJ]3034번_앵그리 창영  (0) 2019.06.01
BOJ]2864번_5와 6의 차이  (1) 2019.05.27
BOJ]7572번_간지  (0) 2019.05.27
BOJ]15917번_노솔브 방지문제야!!  (0) 2019.05.27
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/10   »
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
글 보관함