코딩테스트
[백준][파이썬]1748 수 이어쓰기1
과아아앙
2021. 3. 30. 21:02
문제 출처 : www.acmicpc.net/problem/1748
문제
1부터 N까지의 수를 이어서 쓰면 다음과 같이 새로운 하나의 수를 얻을 수 있다.
1234567891011121314151617181920212223...
이렇게 만들어진 새로운 수는 몇 자리 수일까? 이 수의 자릿수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N(1 ≤ N ≤ 100,000,000)이 주어진다.
출력
첫째 줄에 새로운 수의 자릿수를 출력한다.
내 풀이
n = int(input())
answer = 0
for i in range(1, n + 1):
answer += len(str(i))
print(answer)
처음에는 진짜 단순히 str으로해서 일일이 세우 준 후 더하는 방식으로 짜봤다.
pypy에서는 맞았습니다가 나왔지만, python에서는 당연하게도 시간초과가 떴다.
그래서 규칙성을 찾았는데
주어진 숫자의 자릿수보다 하나 적은 자릿수의 수는 9 * (10)^(n-1)개 이며
여기에 각 자릿수를 곱하면 되는 규칙이 있었다.
즉, 9 * (10)^(n-1) * (n)의 규칙을 따른다.
이 후에 해당 규칙과 함께 마지막 자리수는 이전 개수를 빼서 똑같이 해주면 되기에 구현을 해주었다.
n = input()
comp = len(n) - 1
answer = 0
for i in range(comp):
answer += 9 * (10 ** i) * (i + 1)
i += 1
answer += ((int(n) - (10 ** comp)) + 1) * (comp + 1)
print(answer)