알고리즘/백준

백준 1748 - 수 이어 쓰기 1/ Python

Hwisaek 2021. 8. 26. 13:39
반응형

문제: 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)이 주어진다.

출력

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


정답

n = input()
length = len(n)

count = 0

if length > 1:
    i = 0
    for i in range(1, length):
        count += 9 * (10 ** (i - 1)) * i

    n = int(n) - (10 ** i)
    n += 1
    count += n * (i + 1)
else:
    count = n

print(count)

# 1   ~   9    | 9 * 1
# 10  ~   99   | 90 * 2
# 100 ~   999  | 900 * 3
# 1000~   9999 | 9000 * 4

# 9 * 1 + 90 * 2 + 900 * 3 + 9000 * 4

 


풀이

더보기
n = input()
length = len(n)

count = 0

if length > 1:
    i = 0
    for i in range(1, length):
        count += 9 * (10 ** (i - 1)) * i

    n = int(n) - (10 ** i)
    n += 1
    count += n * (i + 1)
else:
    count = n

print(count)

# 1   ~   9    | 9 * 1
# 10  ~   99   | 90 * 2
# 100 ~   999  | 900 * 3
# 1000~   9999 | 9000 * 4

# 9 * 1 + 90 * 2 + 900 * 3 + 9000 * 4

  각 자리수별 개수의 합을 먼저 구한 다음, 해당 자릿수에서의 연산만 처리하면 되는 문제입니다.

반응형