어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다.
등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다.
N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를
출력하는 프로그램을 작성하시오.
첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.
첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.
자연수 은 보다 작거나 같으므로 수열의 항은 최대 4개이다.
은 한 자리 수 혹은 두 자리 수 이므로,
모든 경우에서 등차수열의 특징을 만족한다.
이 3자리 수 일 때,
백의 자리 숫자 와 일의 자리 숫자 의 합은 십의 자리 숫자 의 두 배와 같은 경우에 한하여 등차수열이다.
이 4자리 수 일 때,
의 경우 밖에 없고, 등차수열이 아니다.
- 항이 두 개 이하인 수열 은 항상 등차수열이다.
- 항이 세 개인 등차수열 에 대해 를 만족한다.
맞았습니다!!
python
def isHan(num):
l = list(map(int, str(num)))
if len(l) < 3: return True
return l[1] * 2 == l[0] + l[2]
cnt = 0
for i in range(int(input())):
if isHan(i + 1): cnt += 1
print(cnt)
위 코드에서는 특정 숫자 num
에 대해 한수 여부를 반환하는 isHan(num)
함수를 정의하였다.
str(num)
정수 자료형 값(num
)을 문자열 자료형으로 변환한다.
123
→ '123'
list(map(int, str(num)))
문자열 값(str(num)
)을 정수 리스트로 변환한다.
'123'
→ [1, 2, 3]
list(str(num))
과 같이 구현했다면 ['1', '2', '3']
이 되었을텐데 이는 원하는 결과가 아니다.