출처: https://meyouus.tistory.com/64 [정보 공유 - For Me For You For Us]
본문으로 바로가기

 

사실 이 문제는 2주일 전에 처음 접한 문제였다가 풀지를 못해서 2주뒤인 오늘 다시 보게 되었는데, 조금 고민하더니 풀이가 생각나서 한번에 풀 수 있게 되었다:

import sys

def one_num(x):
    list_x = [int(i) for i in list(str(x))]
    d = []
    for i in range(len(list_x)-1):
        d.append(list_x[i] - list_x[i+1])
    d_set_list = list(set(d))
    if len(d_set_list) > 1:
        return False
    else:
        return True

N = int(sys.stdin.readline())
count = 0
for j in range(1, N+1):
    if one_num(j):
        count += 1
    elif not one_num(j):
        pass
print(count)
  1. def one_num(x)을 통해 한수를 구하는 함수를 만들어 준다.
  2. d라는 공차를 담는 빈 리스트를 만들어주고, x를 자릿수마다 정수로 담은 리스트를 list_x로 정의한다.
  3. d_set_list 라는 리스트는, 공차 리스트인 dset로 만들어주고, 이 set를 다시 리스트로 만든것으로 정의한다.
  4. 따라서 이 d_set_list의 길이가 1보다 크다면, 그 뜻은 각 주어진 숫자의 각 자릿수들의 공차가 일정하지 않다는 뜻이므로, 한수가 아니다. 만약 d_set_list의 길이가 1과 같다면, 자릿수들의 공차가 일정하다는 뜻이므로, 한수로 정의될 수 있다
  5. 마지막으로, 1부터 N까지의 숫자들을 각각 한수인지 확인해주고, 한수가 맞다면 이를 count에 1을 더해준다.
  6. 마지막으로 count를 출력해준다면 1 이상 N 이하의 숫자들 중에 한수의 개수를 확인할 수 있다.