입력으로 자연수 N이 주어질 때, 1에서 N사이에 속한 한수의 개수를 출력하라고 요구한다.
아래에 그려둔 e.g를 참고하면 바로 이해할 수 있다.
핵심은 1에서 N까지 수가 차례로 주어졌을 때,
수의 각 자리간의 순서대로 차이를 구해 이 차이가 모두 같은 경우 한수로 처리하는 것이다.
양의 정수 X의 자릿수가 한자리 수, 두자리 수인 경우 등차수열이므로 len()함수로 입력을 분해한 문자리스트의 길이가 1이나 2에 해당하는 경우 count하도록 사전 조건 처리했다.
STEP 1 ) firstDif 라는 변수에 미리 양의 정수의 첫자리수와 둘째자리수의 차값을 저장해뒀다.
STEP 2 ) 그 밑에서 반복 리스트의 범위를 1 ~ (c_list 길이 -1) 로 하는 반복을 구현했다.
STEP 3 ) 해당 반복문 내에서 c_list의 둘째자리부터 마지막자리까지 차와 미리 저장해둔 첫번째 차인 firstDif 를 비교하여 맞을경우 count를 하나씩 올리도록 했다.
STEP 4 ) 해당 반복이 끝나고 count의 횟수가 c_list의 길이 -2와 같다면 모든 자리수가 등차수열을 이룬다고 판단하고 한수의 총계인 total_cnt에 count를 올린다.
N = int(input())
total_cnt = 0
for i in range(1,N+1) :
c_list = list(str(i))
dif_list = list()
cnt = 0
if len(c_list) == 1 or len(c_list) == 2 :
total_cnt += 1
else :
#
for i in range(len(c_list)):
c_list[i] = int(c_list[i]) #char를 int로 변환저장
firstDif = c_list[1] - c_list[0]
for c in range(1, len(c_list)-1) : #차이의 수이므로 -1, 또한 이미 첫번째 차값을 반복 앞에서 구해놨으므로 -1, 총 charList 길이의 -2만큼 반복한다
if firstDif == c_list[c+1] -c_list[c] :
cnt += 1
else :
break
if cnt == len(c_list) - 2 :
total_cnt += 1
print(total_cnt)