1748번: 수 이어 쓰기 1
첫째 줄에 N(1 ≤ N ≤ 100,000,000)이 주어진다.
www.acmicpc.net
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)
n까지의 숫자를 문자로 바꿔 글자수를 더하는 코드를 짰는데 시간초과가 떴다.
다른 접근으로 생각해보면
n이 한자리수라면 최대치는 1*9, 두자리수라면 2*90, 세자리수라면 3*900이다.
n의 자릿수-1번까지 위 규칙의 수를 더하고 length*(n-10**(length-1)+1)을 더해주면 된다.
수정코드
n = int(input())
answer = 0
length = len(str(n))
if length == 1:
answer = int(n)
else:
answer = 9
for i in range(2,length):
answer += i*(9*10**(i-1))
answer += length*(n-10**(length-1)+1)
print(answer)'Algorithm' 카테고리의 다른 글
| [백준] 2108번 통계학 / python (0) | 2024.04.04 |
|---|---|
| [백준] 1966 프린터 큐 / python (0) | 2024.04.03 |
| [백준] 1620번 나는야 포켓몬 마스터 이다솜 / python (0) | 2024.04.01 |
| [백준] 1057 토너먼트 / python (0) | 2024.04.01 |
| [백준] 1269번 대칭차집합 / python (0) | 2024.03.31 |