차곡차곡

[BOJ/Python] 백준 1748번 - 수 이어 쓰기 1 본문

CS/Algorithm

[BOJ/Python] 백준 1748번 - 수 이어 쓰기 1

sohy 2022. 5. 13. 02:24

백준 #1748 수 이어 쓰기 1

 

1748번: 수 이어 쓰기 1

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

www.acmicpc.net

import sys
input = sys.stdin.readline

num = input().strip()
cnt = 0   # 자릿수

for i in range(len(num), 0, -1):
    if len(num) == 1:   # 한 자릿수일 경우
        cnt = int(num)
    else:
        if i == len(num):
            cnt = i * (int(num) - (10 ** (len(num) - 1)) + 1)
        else:
            cnt += i * (9 * (10 ** (i - 1)))

print(cnt)
  1. 입력 숫자가 한 자리 수일 경우 새로운 수의 자릿수는 그 값과 같다.
  2. 두 자리 이상의 수부터는 자릿수가 1인 경우부터 입력 숫자의 자릿수까지 각 자릿수에서 몇 개의 수가 입력될 수 있는지 구하면 된다.
  3. 예를 들어 입력 숫자가 126일 경우,
    1. 첫 번째로 세 자리 수는 100~126까지로 총 27개의 수가 입력될 수 있다. 따라서 이 수들을 쭉 나열하면 3 * 27 = 81개의 숫자가 입력된다.
    2. 두 번째로 두 자리 수는 10~99까지로 총 90개의 수가 입력될 수 있다. 따라서 이 수들을 쭉 나열하면 2 * 90 = 180개의 숫자가 입력된다.
    3. 마지막으로 한 자리 수는 1~9까지로 총 9개의 수가 입력될 수 있다. 따라서 이 수들을 쭉 나열하면 1 * 9 = 9개의 숫자가 입력된다.
    4. 이제 계산 값들을 모두 더하면 최종적으로 새로운 수의 자릿수가 된다. 81 + 180 + 9 = 270
  4. 입력 숫자 자릿수를 제외하고 각 자릿수에서 나올 수 있는 수의 개수가 9 → 90 → 900 ... 로 늘어나는 것을 알 수 있다!

 

** 타임 아웃 코드

import sys
input = sys.stdin.readline

n = int(input())
new_num = ''

for i in range(1, n+1):
    new_num += str(i)

print(len(new_num))
Comments