[백준] 한수 (1065) - JavaScript

안함·2021년 7월 7일
0

백준

목록 보기
11/12

문제

어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.

문제


입력

첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.


출력

첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.


입출력 예제

// 입력
110

// 출력
99

풀이

한수 아닌지 구별할수 있는 배열을 n + 1 크기로 만들어준다. (0번인덱스는 0 이기 때문에 +1해줌)

그다음 for문을 돌려 한수인지 확인해봄.

100미안 수는 무조건 한수이기 때문에 continue로 다 스킵

100이상부턴 한수인지 체크해야함

숫자를 string으로 형변환 한 후 자릿수마다 쪼개준다.

10의자리수와 1의 자리수를 빼 공차인 d를 구한다.

이후 for으로 공차가 d인지 확인한다. 만약 공차가 d랑 다른게 나오면 false를 넣어주고 break

그후 filter를 사용해 true인 것만 골라준후 길이를 구해서 출력! 하면 틀리고 0도 true이기 때문에 0을 빼야하기때문에 - 1을 한 후 출력!


코드


let input = +require('fs').readFileSync('/dev/stdin').toString().trim();

const n = +input;

const arr = new Array(n + 1).fill(true);

for (let i = 0; i < n + 1; i++) {
  const numList = String(i).split('');
  if (numList.length < 3) {
    continue;
  } else {
    const d = numList[1] - numList[0];
    for (let j = 1; j < numList.length - 1; j++) {
      if (d !== numList[j + 1] - numList[j]) {
        arr[i] = false;
        break;
      }
    }
  }
}
console.log(arr.filter((is) => is).length - 1);
profile
✨ Frontend Developer 🧑‍💻

0개의 댓글