파이썬 한수(백준 BOJ 1065)


문제

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


입력

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


출력

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


예제 입력 1

110

예제 출력 1

99


예제 입력 2

1

예제 출력 2

1


예제 입력 3

210

예제 출력 3

105


예제 입력 4

1000

예제 출력 4

144


예제 입력 5

500

예제 출력 5

119


✏️ 풀어보기

여기서 한수라는건 등차수열 즉, 연속된 수 차이가 일정한것. 123(공차 1), 135(공차 2), 246(공차 2)같은 수들을 말하는것이다.

그렇기 때문에 1~99까지의 수는 전부 한수에 포함이 된다.

-> 첫 번째 자리와 두 번째 자리를 비교했을때 나오는 공차가 하나뿐이므로.

조건에서 보면 1000보다 작거나 같다고 했으니 한수로 나오는 값은 최대 3자리가 될것이다.

n = int(input())
hansu = 0

for i in range(1, n+1): # 1부터 n까지
    number_list = list(map(int, str(i))) # 쪼갠 숫자를 담을 리스트
    if i < 100: # 1~99까지는 무조건 한수(공차가 한번밖에 없어서)
        hansu += 1 
    elif number_list[1]-number_list[0] == number_list[2]-number_list[1]: 
        hansu += 1 # 3자리인 경우 2번째 자리에서 1번째를 뺀 값과, 3번째 자리에서 2번째를 뺀 값이 같다면? 공차가 같으므로 한수  
print(hansu)

먼저 주어지는 자연수 n과 한수의 개수를 셀 변수를 선언했다.

그리고 1부터 n까지 for문을 만들고, 거기에 숫자 비교를 위해 숫자를 쪼개서 담을 수 있는 리스트를 만들어 담는다.

1~99까지의 수는 전부 한수에 포함이 되므로, 1부터 99까지 카운트가 올라가고

3자리인 경우에 2번째 자리에서 1번째를 뺀 값과, 3번째 자리에서 2번째를 뺀 값이 같다면 공차가 같아 한수이므로 카운트가 올라가게 했다.

관심있을 포스팅