1부터 N까지의 수를 이어서 쓰면 다음과 같이 새로운 하나의 수를 얻을 수 있다.
1234567891011121314151617181920212223...
이렇게 만들어진 새로운 수는 몇 자리 수일까? 이 수의 자릿수를 구하는 프로그램을 작성하시오.
첫째 줄에 N(1 ≤ N ≤ 100,000,000)이 주어진다.
첫째 줄에 새로운 수의 자릿수를 출력한다.
15
21
var fs = require('fs');
let N = fs.readFileSync(0, 'utf-8').toString().trim();
let answer = 0;
let a = '';
let count = [9, 90 * 2, 900 * 3, 9000 * 4, 90000 * 5, 900000 * 6, 9000000 * 7, 90000000 * 8];
if (N.length === 1) {
answer = Number(N);
} else {
for (let i = 0; i < N.length - 1; i++) {
answer += count[i];
a += '9';
}
answer += (N - Number(a)) * N.length;
}
console.log(answer);
처음 방법이랑 비슷하게 생각해내긴 했는데 너무 복잡하게 생각했다. 예를 들어 N이 1234일 때, 999까지의 자릿수는 구했지만, 1000~1234까지의 자릿수를 계산하는 것을 너무.... 돌아돌아갔다. 결국 끝이 안 보여서 다른 사람들의 풀이를 봤는데 공식으로 풀더라.. 조금만 더 예시를 들어서 생각했다면, 유추할 수 있던 공식이었다. 실제로 그와 비슷하게 풀이를 하고 있었고. 조금만 더 문제를 들여다볼 걸 싶긴 했다. 그래도 그 공식 덕에 막혔던 혈이 뚫려서 풀 수 있었다.