열어보며

입력으로 자연수 N이 주어질 때, 1에서 N사이에 속한 한수의 개수를 출력하라고 요구한다.

  • 한수란? : 양의 정수 X의 각 자리가 등차수열인 수

아래에 그려둔 e.g를 참고하면 바로 이해할 수 있다.

고민 및 풀이

핵심은 1에서 N까지 수가 차례로 주어졌을 때,
수의 각 자리간의 순서대로 차이를 구해 이 차이가 모두 같은 경우 한수로 처리하는 것이다.

양의 정수 X의 자릿수가 한자리 수, 두자리 수인 경우 등차수열이므로 len()함수로 입력을 분해한 문자리스트의 길이가 1이나 2에 해당하는 경우 count하도록 사전 조건 처리했다.

  • 주의 : 위의 코드에서 line 6의 str(i)를 list(str(i)) 로 정정하였습니다.

최종 코드

  • 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)
profile
가용한 시간은 한정적이고, 배울건 넘쳐난다.

0개의 댓글