728x90
문제 출처: https://www.acmicpc.net/problem/1748
1748번: 수 이어 쓰기 1
첫째 줄에 N(1 ≤ N ≤ 100,000,000)이 주어진다.
www.acmicpc.net
문제
1부터 N까지의 수를 이어서 쓰면 다음과 같이 새로운 하나의 수를 얻을 수 있다.
1234567891011121314151617181920212223...
이렇게 만들어진 새로운 수는 몇 자리 수일까? 이 수의 자릿수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N(1 ≤ N ≤ 100,000,000)이 주어진다.
출력
첫째 줄에 새로운 수의 자릿수를 출력한다.
예제 입력 1
5
예제 출력 1
5
예제 입력 2
15
예제 출력 2
21
예제 입력 3
120
예제 출력 3
252
정답
num = int(input())
tmp = num
answer = 0
n_1 = 9
if num<10:
answer = num
else:
for i in range(len(str(num))-1):
if i ==0:
answer += (10**i*n_1)
else:
answer += (10**i*n_1)*(i+1)
answer+=(tmp-int(str(9)*(len(str(num))-1)))*len(str(num))
print(answer)
1. num에 숫자 입력, tmp에 같은값 입력
2. n_1 = 9세팅 --> 나중에 계산할 때 사용
3. if문 10 이하 일때는 따로 세팅
4. else 최고 자리 숫자 전 숫자까지(ex.999, 99 등) n_1과 자리수를 곱해서 answer에 덧셈
5. tmp에서 최고자리 전 숫자의 값을 뺀 후 나머지 값을 전체 자리의 길이 만큼 곱해주면 끝
뭔가 코드를 보니까 클린하지 못하네요 ㅎㅎ
본가와서 술마시고 풀었으니... 답을 찾기만 하느라 클린하지 못했네요
문제 자체는 쉬워보이지만 시간 제한 때문에 하나하나 더하는 방식은 시간초과가 뜹니다!
728x90
'코딩 > 백준' 카테고리의 다른 글
[백준/파이썬/수학] 10972번 다음 순열 코딩테스트 연습풀이 실버3 (0) | 2022.04.10 |
---|---|
[백준/파이썬/수학] 4101번 크냐? 코딩테스트 연습풀이 브론즈3 (0) | 2022.04.09 |
[백준/파이썬/수학] 3036번 링 코딩테스트 연습풀이 실버3 (0) | 2022.04.07 |
[백준/파이썬/수학] 1057번 토너먼트 코딩테스트 연습풀이 실버3 (0) | 2022.04.06 |
[백준/파이썬/수학] 1373번 2진수 8진수 코딩테스트 연습풀이 브론즈2 (0) | 2022.04.05 |