한수
문제
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.
출력
첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.
문제출처: https://www.acmicpc.net/problem/1065
풀이 과정
.
.
.
.
.
.
.
.
.
.
#1.
- 정수를 string으로 변환하여 자릿수별로 쪼갠다.
- 100 미만의 수는 모두 등차수열임을 if문으로 해결한다.
- 앞뒤 차이를 비교하여 등차수열인지 판별한다.
def ari(n):
lst=list(map(int,str(n)))
if n<100:
return True
else:
dis=lst[0]-lst[1]
for i in range(len(str(n))-2):
dis2=lst[i+1]-lst[i+2]
if dis==dis2:
continue
else:
return False
return True
n=int(input())
print([ari(i+1) for i in range(n)].count(1))
#or
print(sum([ari(i+1) for i in range(n)]*1))
#2. better
- 정수를 string으로 변환하여 자릿수별로 쪼갠다.
- set의 중복비허용 속성을 이용하여 등차수열인지 판별한다.
n = int(input())
i = 0
for x in range(1, n + 1):
n = str(x)
list = []
for y in range(len(n) - 1):
list.append(int(n[y + 1]) - int(n[y]))
ans = set(list)
if len(ans) == 1 or len(ans) == 0:
i += 1
print(i)
#3. better
- 100으로 나눈 몫과 나머지를 이용하여 등차수열임을 판별한다.
num = 0
def isHansu(x):
global num
if x//100 - x%100//10 is x%100//10 - x%10:
num += 1
N = int(input())
for i in range(1, N+1):
if i < 100:
num += 1
else:
isHansu(i)
print(num)
'Python > Algorithm' 카테고리의 다른 글
문자열 - 다이얼 (0) | 2020.03.12 |
---|---|
정수를 자릿수별로 쪼개기 (0) | 2020.03.12 |
Self number 셀프 넘버 (0) | 2020.03.12 |
숫자 배열에서 K번째 큰 값 찾기 (0) | 2020.03.10 |
숫자 배열에서 두 번째로 큰 값 찾기 (0) | 2020.03.10 |