문제
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.
출력
첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.
예제
나의 풀이
N = int(input())
cnt = min(99, N)
for num in range(100, N+1):
a = num // 100
b = (num // 10) % 10
c = num % 10
if a - b == b - c:
cnt += 1
print(cnt)
- 정수가 `100`보다 작은 경우에는 모두 한수에 해당하기 때문에 for문을 `100`부터 시작하고, 카운트에 `100`보다 작은 수를 미리 할당하고 시작했다.
- 만약 `N`이 `100`보다 큰 경우에는 카운트에 `99`가 할당되고, `N`이 `100`보다 작은 경우에는 그 수를 카운트에 할당한 후 for문이 실행되지 않고 바로 출력된다.
- 한수인지 확인하기 위해서 각 자리수를 산술 이용자를 이용해 나눠서 비교했다.
다른 사람의 풀이
N = int(input())
cnt = min(99, N)
for i in range(100, N+1):
num = list(map(int, str(i)))
if num[0] - num[1] == num[1] - num[2]:
cnt += 1
print(cnt)
- 숫자를 문자열로 변환 후 리스트로 쪼개서 인덱스로 접근하는 방법으로도 풀어봤다.
- 참고로 두 가지 풀이 방법의 실행 시간은 동일했다.