[JS] 백준 1065 한수

Hadam Cho·2021년 4월 20일
1

Algorithm

목록 보기
22/32

문제

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


입력

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

출력

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

소스 코드

const input = require('fs').readFileSync('/dev/stdin').toString();

const isHanNumber = (n) => {
  if (n < 100) {
    return true;
  }
  
  const str = String(n);
  const d = +str[0] - +str[1]
  for (let i = 1; i < str.length - 1; i++) {
    if ((+str[i] - +str[i+1]) !== d) {
      return false;
    }
  }

  return true;
}

const N = Number(input);
let result = 0;
for (let i = 1; i <= N; i++) {
  if (isHanNumber(i)) {
    result += 1;
  }
}

console.log(result);

개선한 소스 코드

const input = require('fs').readFileSync('/dev/stdin').toString();

const isHanNumber = (n) => {
  if (n < 100) {
    return true;
  }
  const s = String(n);
  return (+s[0] - +s[1]) === (+s[1] - +s[2]);
}

const N = Number(input);
let result = 0;
for (let i = 1; i <= N; i++) {
  if (isHanNumber(i)) {
    result += 1;
  }
}

console.log(result);

느낀 점

입력 조건이 1,000보다 작거나 같은 자연수 N이므로 세 자리인 수만 생각하면 된다는 것을 조금 나중에 깨달았다. 1~99는 무조건 한수이므로 각 자릿수를 숫자로 표현했을 때 1-2 === 2-3이 참이라면 한수가 된다.

profile
(。・∀・)ノ゙

0개의 댓글