문제 원문.
Problem Statement |
|||||||||||||
John and Brus believe that the digits 4 and 7 are lucky and all others are not. According to them, an almost lucky number is a number that contains at most one non-lucky digit in its decimal representation. Return the total number of almost lucky numbers between a and b, inclusive. | |||||||||||||
Definition |
|||||||||||||
|
|||||||||||||
Constraints |
|||||||||||||
– a will be between 1 and 1,000,000, inclusive. | |||||||||||||
– b will be between a and 1,000,000, inclusive. | |||||||||||||
Examples0) 4 7 Returns: 4 All numbers between 4 and 7 are almost lucky. 1) 8 19 Return : 4 Numbers 8, 9, 14 and 17 are almost lucky. 2) 28 33 Return: 0 No almost lucky numbers here. 3) 1234 4321 Return : 36 |
1. 문제 분석.
문제는 간단하다. 일정 범위의 시작과 끝을 알려주는 숫자 2개가 주어지면,
이 두 숫자 사이의 행운의 숫자가 몇개 인지를 세는 문제이다.
여기서 행운의 숫자란, 4와 7이 들어간 숫자를 의미하는데,
숫자열 중에 1개 정도는 4와 7이 아니어도 행운의 숫자로 간주한다.
즉 144, 177 147 등은 행운의 숫자이나 114 117 등은 행운의 숫자가 아니다.
2. 문제 해결 방법.
문제 해결 방법은 간단하다. 범위의 모든 수를 하나하나씩
가져와서 이 숫자가 행운의 숫자인지를 테스트하여
행운의 숫자이면 카운트를 증가시켜주어
증가시킨 카운트를 리턴 해주면 된다.
행운의 숫자인지 아닌 지를 판별하는 방법은
일단 1자 정도의 오차는 허용되니, 1자리 수는 모두 행운의 숫자로 간주된다.
2자리 이상의 숫자는 한자씩 가져와서 4와 7이 아니면 0으로 초기화 시킨
별도의 변수를 1씩 증가시킨다. 그리고 숫자의 끝이 되었을 때,
값이 1보다 크면 행운의 숫자가 아닌것이고, 1보다 작거나 같다면 행운의 숫자인것이다.
3. 소스코드