코딩/백준

[백준/파이썬/수학] 1748번 수 이어 쓰기1 코딩테스트 연습풀이 실버3

thisisjade 2022. 4. 8. 23:57
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