새소식

반응형
Language/알고리즘

백준 BaekJoon 14726번: 신용카드 판별 [Java] 자바

  • -
반응형

2020-11-26


문제

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

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

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

입력

첫째 줄에 테스트 케이스의 수 T(1 ≤ T ≤ 1000)이 주어진다.

그 다음 줄부터 테스트 케이스에 해당하는 신용카드 번호가 주어진다.

출력

신용카드의 번호가 유효하면 “T”, 유효하지 않으면 “F”를 한 줄 씩 출력한다.


import java.util.Scanner;

public class TemplateA {
    public static void main(String[] args){
		Scanner scan = new Scanner(System.in);
		
		int Tcase = scan.nextInt();
		int [] CardNum = new int [16];
		
		int sum = 0;
		
		for(int i = 0; i < Tcase; i++) {
			String str = scan.next();
			for(int j = 0; j < 16; j++) {
				CardNum[j] = str.charAt(j) - '0';
			}
			//우선 문자열로 받고 하나씩 잘라가며 배열에 넣어줌
			
			for(int k = 0; k < 16; k++) {
				if(CardNum[k] % 2 == 0) {
					CardNum[k] *= 2;
					//짝수 체크후 짝수면 두배를 곱해줌
					if(CardNum[k] >= 10) {
					int temp = CardNum[k] % 10;
					CardNum[k] /= 10;
					CardNum[k] += temp;
					//10이상일 경우 10으로 나눈 나머지를 temp변수에  임시보관 후
					//현재 배열을 10으로 나눈 몫과 더해서 새로운 값을 넣어줌
				}
			}
				sum += CardNum[k];
				//해당값 총합에 넣어줌
			}
			System.out.println();
			if(sum % 10 == 0) {
				System.out.println("T");
			}else {
				System.out.println("F");
			}
			//10으로 나누어 나머지가 있나 체크
			
		}
    }
}

 

출처링크: www.acmicpc.net/problem/14726

 

14726번: 신용카드 판별

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

www.acmicpc.net

 

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.