알고리즘/백준

BOJ | 1748 - 수 이어 쓰기 1 (python)

유하 yuha 2022. 1. 24. 09:13

🪢 수 이어 쓰기

 

 

 


✏️ 문제

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