https://www.acmicpc.net/problem/1748
문제
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);
'Algorithm' 카테고리의 다른 글
[Baekjoon]1244번 스위치 켜고 끄기 - Javascript (0) | 2023.12.19 |
---|---|
[Baekjoon]1302번 베스트셀러 - Javascript (0) | 2023.12.19 |
[Baekjoon]3036번 링 - Javascript (1) | 2023.12.18 |
[Baekjoon]9613번 GCD 합 (1) | 2023.12.15 |
[Baekjoon]17219번 비밀번호 찾기 - Javascript (1) | 2023.12.15 |