관리 메뉴

진취적 삶

수 이어 쓰기 1 본문

알고리즘/브루트 포스

수 이어 쓰기 1

hp0724 2023. 7. 3. 12:46

bookmark

문제

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

1234567891011121314151617181920212223...

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

입력

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

출력

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

나의풀이 1

n= int(input())
str_number=''
for i in range(1,n+1):
     str_number+=str(i)

print(len(str_number))

시간초과

나의풀이 2

n= int(input())
dp=[0]*(n+1)
dp[1]=1
for i in range(1,n+1):
    dp[i]=dp[i-1]+len(str(i))
print(dp[n])

메모리 초과

모범답안

n= int(input())

digit =len(str(n)) # 입력된 수의 자릿수 
count = 0

# 1의 자리부터 (digit-1) 까지의 숫자들의 개수 
# 1자리 9 개 
# 2자리 90 *2  개
# 3자리 900 * 3 개  

for i in range(digit-1):
    count += 9 *10 ** i *(i+1)
     

count +=(n-10**(digit-1) +1)*digit

print(count)

1~9 9개

10 ~ 99까지는 90 *2 개

100~999까지는 900 *3 개 순으로 증가한다.

'알고리즘 > 브루트 포스' 카테고리의 다른 글

N과 M (12)  (0) 2023.07.04
테트로미노  (0) 2023.07.03
카잉 달력  (0) 2023.07.03
리모컨  (0) 2023.07.03
날짜 계산  (0) 2023.07.03