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

1. 문제

 

2. 풀이

<javascript />
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보다 작은 수는 계산 필요없이 한수이다.

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

 

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

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

<javascript />
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 하면서 "한수"의 개수를 구한다.

<javascript />
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

 

 

2.1. 풀이 결과

문제 풀이 결과

 

3. 관련 글

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

 

 

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

memostack

@bluemiv_mm

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