#45. 백준 1065번 문제 풀이: 한수 문제 원본 보기
양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라 한다. N 이 주어졌을 때 1 보다 크가 N이하인 한수의 개수를 출력하시오. 입력: 1,000 이하의 자연수 N 출력: N 이하 한수의 개수
입력/출력
--입력--
110
--출력--
99
문제풀이+해설
한수를 체크하는 함수를 만들고, 루프를 돌려서 한수체크 함수를 불러 한수의 개수를 계산한다.
일단 1 부터 99 까지는 모두 등차수열이다.
그러므로 100 부터 제한값인 999까지만 체크하면 된다.

등차수열임을 계산하는 함수는 아래와 같이 작성할 수 있다.
 1) 1의 자리수와 10의 자리수의 간격을 구한다.
 2) 10의 자리수와 100의 자리수의 간격을 구한다.
 3) 두 간격이 같으면 등차 수열이다.
99 보다 큰 수의 등차수열 개수는 위 함수를 루프로 돌려서 카운트하면 된다.
code sol.
def hansu(n): # 한수인지 체크하는 함수
  if n < 100: # 1~99는 모두 등차수열
    return True
  n2 = n // 10 # 끝자리 없앰
  d = n%10 - n2%10 # 1의 자리수-10의 자리수=간격
  while n2 > 9: 
    if d != (n2%10 - (n2//10)%10): # 앞을 자리수 뺀값이 기존 간격과 다르면 한수가 아님
      return False # 한수가 아니면 False 리턴하고 함수를 끝냄
    n2 = n2 // 10 # 끝자리 없앰
  return True # 간격이 모두 같으므로 한수. True 리턴

n = int(input()) # 숫자를 입력받아 정수로 만들어 대입한다. 최대값 n
count = 99 # 99까지는 모두가 등차수열임
if n < 99: # 99보다 작으면 그 값이 등차수열 갯수
  count = n
else: # 99보다 크면 100 이상 숫자부터 그 값까지 한수 계산
  for i in range(100, n + 1):
    if hansu(i): # 한수이면 카운트 증가
      count += 1

print(count) # 한수의 총갯수 count 출력
© 코드솔 - CodeSol. All Rights Reserved.