본문 바로가기

알고리즘 & 자료구조

[node.js] 수 이어 쓰기 1(백준 1748번)

문제

1부터 N까지의 수를 이어서 쓰면 다음과 같이 새로운 하나의 수를 얻을 수 있다.

1234567891011121314151617181920212223...

이렇게 만들어진 새로운 수는 몇 자리 수일까? 이 수의 자릿수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N(1 ≤ N ≤ 100,000,000)이 주어진다.

출력

첫째 줄에 새로운 수의 자릿수를 출력한다.

예제 입력 1 복사

5

예제 출력 1 복사

5

예제 입력 2 복사

15

예제 출력 2 복사

21

예제 입력 3 복사

120

예제 출력 3 복사

252

 

접근 방법

1의자리 숫자는 전부 1을 더하고,

10의 자리 숫자는 전부 2를 더하고,

100의 자리 숫자는 전부 3을 더하는 방식으로 되어있다.

 

그렇다면 입력값이 532가 되었을때, 어떻게 접근하는것이 좋을까

 

자리수가 늘어날때마다 1을 더하는 방식으로 접근을 해봤다. 

예를들어, 

 

1 ~ 532 까지 전부 1을 더하면,

1 ~ 9 까지는 이미 계산이 끝났고,

10 ~ 99 는 1을 1번만 더 더하고,

100 ~ 532 까지는 2번을 더 더하면된다. 

 

그렇게 해서 접근을 한다면,

1 ~ 532까지 전부 1을 더하고,

10 ~ 532 까지 전부 1을 더하고,

100 ~ 532 까지 전부 1을 더하면 총길이를 알 수 있다.

const fs = require('fs');
const input = fs.readFileSync('input.txt').toString().trim();

const N = +input;
let result = 0;

for (let i = 1; i <= N; i *= 10) {
  result += N - i + 1;
}

console.log(result);

다음의 접근 방식은 다음과 같다.

i                    N      

1         ~       9 의 개수는        9 - 1 +1 = 9 개

10       ~      99의 개수는       99 -10 +1 = 90 개 

100    ~       532의 개수는     532 - 100 +1 = 433개 
이런식으로 접근하는 것이다. 

이걸 코드로 풀어 쓰면 ,

result += N - i +1 이라는 결과가 나온다. 

 

 

'알고리즘 & 자료구조' 카테고리의 다른 글

재귀함수(capitalizeFirst)  (0) 2023.06.22
재귀함수 (flatten)  (0) 2023.06.22