[백준(python)] 1748번: 수 이어 쓰기 1

세하·2023년 11월 3일

[백준] 문제풀이

목록 보기
25/94
post-thumbnail

1748번: 수 이어 쓰기 1

문제

1부터 N까지의 수를 이어서 쓰면 다음과 같이 새로운 하나의 수를 얻을 수 있다.

1234567891011121314151617181920212223...

이렇게 만들어진 새로운 수는 몇 자리 수일까? 이 수의 자릿수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N(1 ≤ N ≤ 100,000,000)이 주어진다.

출력

첫째 줄에 새로운 수의 자릿수를 출력한다.

예제 입력예제 출력
55
1521
120252

풀이 (시간초과)

import sys

def findLength(n):
    return len(str(n))

num = int(sys.stdin.readline())
fullLen = 0

for i in range(1, num+1):
    fullLen += int(findLength(i))
print(fullLen)

설명

그냥 1부터 n까지 돌면서 수의 길이를 더해주는 방법
시간초과 발생.

그럼 뭔가 규칙을 찾아서 최적화를 해야한다.
중간 과정은 필요하지않고 그냥 결과인 길이만 구하면 됨

맞는풀이

import sys

num = sys.stdin.readline().strip() 
#strip해주는거 잊지마라 안그럼 numLen에서 길이가 하나 더 추가된다 줄바꿈때문에
#153 1~9(9번) 10~99(90번) 100~153(주어진수 - 100 + 1)
numLen = int(len(num)) #3
sum = 0

for i in range(1, numLen + 1): 
    if i < numLen:
        sum += (10**(i-1)) * 9 * i
        #print(sum)
    else: 
        sum += (int(num) - (10**(i-1)) + 1) * i
        print(sum)

설명

예제를 보면 숫자가 120일때는 길이가 252이다

1 2 3 4 5 6 7 8 9 (9개)-> 각각의 숫자의 길이가 1
10 11 12 13 14 ... 99 (90) -> 각각의 숫자의 길이가 2
100 101 102... 120 (num - 10^2) -> 각각의 숫자의 길이가 3

0개의 댓글