[백준/파이썬] 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}")
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준/자바] 2941 크로아티아 알파벳 (0) | 2022.11.30 |
---|---|
[백준/자바] 5622 다이얼 (0) | 2022.11.30 |
[백준/파이썬] 4673 셀프 넘버 (1) | 2022.11.30 |
[백준/자바] 18258 큐 2 (0) | 2022.11.28 |
[백준/파이썬] 2953 나는 요리사다 (0) | 2022.11.28 |