memostack
article thumbnail
블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.tistory.com/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
반응형
문제의 저작권은 백준 알고리즘(https://www.acmicpc.net/)에 있습니다

문제

 

풀이

const isHanNum = (n) => {
    if (n < 10) return true;

    let t = n,
        prevNum = null,
        delta = null;
    while (t > 0) {
        const curNum = t % 10;
        if (prevNum != null) {
            const curDelta = prevNum - curNum;
            if (delta != null && curDelta !== delta) {
                return false;
            }
            delta = curDelta;
        }
        prevNum = curNum;
        t = parseInt(t / 10);
    }
    return true;
};

const solution = (input) => {
    const n = +input;
    return [...Array(n).keys()].reduce((cnt, i) => {
        if (isHanNum(i + 1)) return cnt + 1;
        return cnt;
    }, 0);
};

const print = (input) => console.log(solution(input + ''));
process.stdin.on('data', print);

 

상세 풀이

10보다 작은 수는 계산 필요없이 한수이다.

const isHanNum = (n) => {
    if (n < 10) return true;
    // ...중략...
};

 

이전 값과 현재 값을 빼서 등차 값을 구한다. 그리고, 임의의 숫자가 0이 될때까지 루프를 돌면서 등차 값이 같은지 계속 비교한다.

그 다음 등차 값과 비교해서 같지 않다면, false를 반환한다. 루프 끝까지 돌고 나면 모든 등차가 같다는 뜻이므로 true를 반환한다.

const isHanNum = (n) => {
    if (n < 10) return true;

    let t = n,
        prevNum = null,
        delta = null;
    while (t > 0) {
        const curNum = t % 10;
        if (prevNum != null) {
            const curDelta = prevNum - curNum;
            if (delta != null && curDelta !== delta) {
                return false;
            }
            delta = curDelta;
        }
        prevNum = curNum;
        t = parseInt(t / 10);
    }
    return true;
};

 

1부터 주어진 숫자까지 iteration 하면서 "한수"의 개수를 구한다.

const solution = (input) => {
    const n = +input;
    return [...Array(n).keys()].reduce((cnt, i) => {
        if (isHanNum(i + 1)) return cnt + 1;
        return cnt;
    }, 0);
};

 

전체 코드

https://github.com/bluemiv/Algorithm/blob/master/baekjoon/nodejs/src/ex01/ex1065.js

 

GitHub - bluemiv/Algorithm: 알고리즘 풀이

알고리즘 풀이. Contribute to bluemiv/Algorithm development by creating an account on GitHub.

github.com

 

 

풀이 결과

문제 풀이 결과

 

관련 글

2022.07.21 - [Algorithm/Beakjoon] - jest 단위테스트를 이용하여 백준 알고리즘 문제 편하게 풀기

 

 

반응형
블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.tistory.com/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
profile

memostack

@bluemiv_mm

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!