본문 바로가기
알고리즘/백준

[백준/파이썬] 1065 한수

by Renechoi 2022. 11. 30.

[백준/파이썬] 1065 한수

 

 

 

📌 문제 

어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오. 

 

 

⚔ 입력

첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.

 

 

📣 출력

첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.

 

 

 

 


 

 

 

💎 문제분석

 

 

두자리수까지는 자동 카운팅이 되는 것을 유념한다.

 

3자리수 이상부터 계산시 배열의 개수를 벗어나지 않도록 유념한다.

 

 

 

 

💡 코드 구현

 

def get_digit_number(n):
    digits = [int(digit) for digit in str(n)]
    return digits


def get_difference(digits, idx):
    return int(digits[idx-1]) - int(digits[idx-2])


def get_digits_size(digits):
    return len(digits)


def is_common_difference_exist(digits, idx):
    while idx > 2:
        if get_difference(digits, idx) == get_difference(digits, idx-1):
            idx -= 1
        else:
            return False
    return True


if __name__ == "__main__":
    # import timeit
    # start = timeit.default_timer()

    count = 0

    for number in range(int(input())):
        number += 1
        digits = get_digit_number(number)
        size = get_digits_size(digits)

        if size < 3:
            count += 1
            continue

        if is_common_difference_exist(digits, idx=size) == True:
            count += 1

    print(count)

    # end = timeit.default_timer()
    # print(f"time : {end-start}")

 

 

 

 

 

 

 

 

 


반응형