본문 바로가기

알고리즘 문제/백준

[파이썬, Python] 백준 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

해당 문제의 범위는 2가지로 나누어야 합니다. 100 미만의 한자리, 두자리 수는 어떤 수가 오더라도 한수가 됩니다. 따라서 특별한 계산 없이 바로 이를 출력하면 됩니다.

 

그러나 100이상은 각 자리수를 구해 그 차를 계산하는 것이 필요합니다.

 

1 0 0 이라 했을 때 1 / 0 / 0 이렇게 각 자리를 구해야합니다.

 

첫번째 자리 그리고 두번째 자리 1 - 0과

두번째 자리 그리고 세번째 자리 0 - 0이 동일한지 비교하고 동일하면 counter에 1을 더해줍니다.

 

아래는 코드입니다.

n = int(input())
if n < 100:
    print(n)
    exit()

count = 99
for i in range(100, n+1):
    n1 = i % 10
    n2 = i % 100 // 10
    n3 = i // 100
    if n2 - n1 == n3 - n2:
        count += 1
print(count)