[JS] BOJ 1065번 한수

yeopto·2022년 1월 17일
0

Algorithm

목록 보기
7/11
post-thumbnail

출처

BOJ

https://www.acmicpc.net/problem/1065

문제

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

나의 풀이

const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(filePath).toString().split('\n');

let N = Number(input[0]);

solution(N);

function solution(n) {
    let count = 0;

    for (let i = 1; i <= n; i++) {
        let hundNum = Math.floor((i % 1000) / 100);
        let tenNum = Math.floor((i % 100) / 10);
        let oneNum = i % 10;

        if (i < 100) {
            count++;
        } else if (i >= 100 && i < 1000) {
            if (hundNum - tenNum === tenNum - oneNum) {
                count++;
            }
        }
    }
    console.log(count);
}

숫자 N의 범위가 1부터 1000까지이다. 한수는 예를 들어 수가 1234처럼 각자리 숫자들이 등차수열로 이루어진 숫자를 말한다. 당연히 1000은 한수가 아니기에 1부터 999까지 확인해주면 된다. → 1부터 N까지 반복할 것 → 100의자리 숫자, 10의 자리 숫자, 1의 자리 숫자를 구한다. → 두자리숫자들 즉, 1에서 99는 한수다. 그래서 100 전까지는 count를 세어 주고 100부터 999일 때 100의 자릿수에서 10의 자릿수 뺀 것과 10의 자릿수에서 1의 자릿수 뺀 값이 같으면 등차수열이고 바로 한수이기에 count세어준다. 그리고 반복문 빠져나와서 count 출력.

profile
https://yeopto.github.io로 이동했습니다.

0개의 댓글