[Topcoder] The Almost Lucky Numbers Div Two

문제 원문.

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

Class: TheAlmostLuckyNumbersDivTwo
Method: find
Parameters: int, int
Returns: int
Method signature: int find(int a, int b)
(be sure your method is public)

Constraints

– a will be between 1 and 1,000,000, inclusive.
– b will be between a and 1,000,000, inclusive.

Examples

0)

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. 소스코드

[Source Code]

 

댓글 남기기

%d 블로거가 이것을 좋아합니다: