https://www.acmicpc.net/problem/1065
1065번: 한수
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나
www.acmicpc.net
문제
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
내 풀이
n = int(input())+1
alist = []
blist = []
for j in range(1, n):
alist.append(j)
for i in range(len(alist)):
char = list(str(alist[i]))
if len(char) > 2:
d = float(int(char[0]) - int(char[1]))
d2 = float(int(char[1]) - int(char[2]))
if d == d2:
blist.append(alist[i])
if 2 >= len(char):
blist.append(alist[i])
print(len(blist))
해설
등차수열 an - an+1 = d 가 항상 성립하는 수열 , ex 123 d=1 , 111 d=0, 321 d=-1.
1의 자리와 10의 자리는 모두 등차수열이 성립되기에 100 이전엔 모두 등차수열이다.
정답 풀이
num = int(input())
hansu = 0
for i in range(1, num+1):
num_list = list(map(int, str(i)))
if i < 100:
hansu += 1 # 100보다 작으면 모두 한수
elif num_list[0]-num_list[1] == num_list[1]-num_list[2]:
hansu += 1 # x의 각 자리가 등차수열이면 한수
print(hansu)
출처:https://ooyoung.tistory.com/65
해석
큰 설명이 필요 없는듯.
댓글