Algorithm

[Baekjoon]1748번 수 이어 쓰기 1 - Javascript

호밀이 2023. 12. 18. 20:41

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

 

1748번: 수 이어 쓰기 1

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

www.acmicpc.net

문제

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

1234567891011121314151617181920212223...

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

입력

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

출력

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

예제 입력 1 복사

5

예제 출력 1 복사

5

예제 입력 2 복사

15

예제 출력 2 복사

21

예제 입력 3 복사

120

예제 출력 3 복사

252

 

문제풀이(1)

수의 범위가 1억까지이기 때문에 for로 전체 순회를 할 경우 시간초과가 날것으로 예상된다.
수의 자릿수를 구하는 공식을 작성하여 구해본다.
1~9는 한자리수, 10~99는 두자리수, 100~999는 세자리수이다.
위의 규칙성을 봤을 때 1의 자리수부터 10의 배수로 자리수를 계산할 수 있음을 알 수 있다. (1 -> 10 -> 100 -> 100)
N - (자리수) + 1 = 자리수의 개수이다.
15 -> 15 - 1 + 1 = 15 = 한자리수의 개수
15 -> 15 - 10 + 1 = 6 = 두자리수의 개수
위와 같은 형식으로 규칙성을 가질 수 있다.

const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
const N = Number(require("fs").readFileSync(filePath).toString().trim());

let answer = 0;

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

console.log(answer);