예를 들어 1, 3, 5, 7, 9, ...은 등차수열이다. 이때 두 항의 차이는 이 수열의 모든 연속하는 두 항들에 대해서 공통으로 나타나는 차이므로, 공차라고 한다.
예를 들어, 앞의 수열의 공차는 2이다.
문제에서는 양의 정수 X의 각 자리가 등차수열을 이룬다면 이 수를 한수라고 하였다.
예를 들면 123은 각 자리수의 차가 1씩 나고, 147은 각 자리수의 차가 3씩 난다. 이 처럼 각 자리수의 차이가 공통적인 수를 한수라고 한다.
이때 N의 수는 1부터 1000까지의 숫자로 되어있다.
문제를 풀 때 나는 경우의 수를 3가지로 나누어 풀었다.
N이 1~99인 경우, 각 자리수 차이를 비교할 수 없어 모든 수가 한수에 속한다.
(예를 들어, 97인 경우 각 자리수의 차이는 2이다. 하지만 두 자리수이므로 비교할 대상이 없다. 따라서 1~99 모든 수가 한수에 속하게 된다. )
N이 100~999인 경우, 각 자리수를 비교해야한다.
이 경우에는 숫자의 일의 자리, 십의 자리, 백의 자리를 잘라 일의 자리- 십의 자리 == 십의 자리- 백의 자리 가 같은 경우에만 count를 해주었다.
N이 1000인 경우에는, 자리수가 4자리로 늘어나게 된다.
하지만 4자리수인 경우는 1000뿐이다. 1000은 한수가 될 수 없으므로 N= 999로 두어 풀었다.
<첫 번째로 구현한 코드> - 출력 초과
# 1065
n = int(input())
count = 0
a = []
def hansu(n):
count = 99
for i in range(100, n + 1):
for j in str(i):
a.append(j)
data_a = list(map(int, a))
if data_a[0] - data_a[1] == data_a[1] - data_a[2]:
count += 1
data_a.clear()
a.clear()
return count
if n < 100:
count = n
print(count)
elif 100 <= n <= 999:
hansu(n)
elif n == 1000:
n = 999
hansu(n)
코드는 출력초과 결과가 떴다.
..그렇다고 한다.
좀 더 간결하게 코드를 짜야하겠다고 생각하였다.
def hansu(n):
count = 0
for i in range(1, n + 1):
a = list(map(int, str(i)))
print(a)
if i < 100:
count += 1
elif a[0] - a[1] == a[1] - a[2]:
count += 1
return count
n = int(input())
print(hansu(n))