●문제 :
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
●입력 :
첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.
●출력 :
첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.
●예제입력:
110
1
210
1000
500
●예제출력:
99
1
105
144
119
- 문제 해석에 대해 어려운 점이 있어, 문제에 대한 이해도를 높이기 위한 글을 적어보자면,
- 각 숫자의 뺄셈이 같아야한다. 절대값도 같아야한다. 숫자 123이라면 아래와 같이 같아야한다는 말이다.
- 1-2 = -1
- 2-3 = -1
- 100아래에 있는 한자리 수, 두자리수의 공차는 일괄적이므로 모두 등차수열로 판단한다.
- 1, 2, 3 ==> 모두 공차가 0인 등차수열
- 12, 15, 39 ==> 모두 공차가 1, 4, 6 인 등차수열
- 따라서, 100 이하의 모든 수는 등차수열로 즉, 한수로 판단한다. 100이상부터 판단하는 함수가 필요하다.
- 각 숫자의 뺄셈이 같아야한다. 절대값도 같아야한다. 숫자 123이라면 아래와 같이 같아야한다는 말이다.
●정답:
const input = Number(require('fs').readFileSync(0).toString().trim());
let count = 0;
for (let i = 1; i<= input; i++){
let array = String(i).split('').map(Number);
if (array.length <= 2){
count++;
continue;
} else{
let A = array[0] - array[1];
let B = array[1] - array[2];
A == B ? count++ : null
}
}
console.log(count)