🪢 수 이어 쓰기
✏️ 문제
1부터 N까지의 수를 이어서 쓰면 다음과 같이 새로운 하나의 수를 얻을 수 있다.
1234567891011121314151617181920212223...
이렇게 만들어진 새로운 수는 몇 자리 수일까? 이 수의 자릿수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N(1 ≤ N ≤ 100,000,000)이 주어진다.
출력
첫째 줄에 새로운 수의 자릿수를 출력한다.
💡 해결방법
문자열을 모두 생성하여 풀면 시간초과가 나므로(문제의 하단에 시간에 대한 제한이 나와있다.)
규칙을 찾아서 풀어야 하는 문제다.
1~9 까지의 합은 => 1 * 9 = 9
10~99 까지의 합은 => 2 * 90 = 180
100~999 까지의 합은 => 3 * 900 = 2700
이런식으로 각 자리수에 대한 곱은 위와 같이 구할 수 있다.
만약 120일때 10~99까지는 미리 구한 후 더하는 것이다.
이후 구한 값은 빼고 나머지 100~120을 구해야 하므로
(120 - 100 + 1)을 한 후 자리수(3)를 곱하면 된다.
👩🏻💻 소스코드
import sys
num = int(sys.stdin.readline())
l = len(str(num))
res = 0
for i in range(1, l):
res += i * 9 * pow(10, (i-1))
res += (num - pow(10, l-1)+1) * l
print(res)
1748번: 수 이어 쓰기 1
첫째 줄에 N(1 ≤ N ≤ 100,000,000)이 주어진다.
www.acmicpc.net
'알고리즘 > 백준' 카테고리의 다른 글
BOJ | 2607 - 비슷한 단어 (python) (0) | 2022.02.01 |
---|---|
BOJ | 1475 - 방 번호 (python) (0) | 2022.02.01 |
BOJ | 1504 - 특정한 최단 경로 (python) (0) | 2022.01.23 |
BOJ | 9465 - 스티커 (python) (0) | 2022.01.22 |
BOJ | 1389 - 케빈 베이컨의 6단계 법칙 (python) (0) | 2022.01.07 |