본문 바로가기

알고리즘/백준알고리즘

[백준 알고리즘/Python] 1748 수 이어 쓰기1

문제

 

문제 이해

처음에 발견했던 규칙이 

1자리수는 1씩늘어나고

2자리수는 2씩늘어나고

3자리수는 3씩 늘어나고

...

 

그렇다면 예를들어 120이 들어왔을 때 100 ~ 120까지의 수를 제외하면 1자리수, 2자리수의 갯수의 값과 같습니다.

220이 들어왓을 때 100 ~ 220까지의 수를 제외하면 1~99까지의 자리수는 같겠죠

1~9 => 9개

10~ 99 => 90개

100 ~ 999 => 900 개 

이런식으로 규칙을 가졌습니다.

 

그렇다면

  • 1일 때는 9 * 1 * 1
  • 2일 때는 9 * 10 * 2
  • 3일 때는 9 * 100 * 3

의 규칙을 찾을 수 있습니다. 

 

ex) 220이 들어왔을 때 먼저 1~99 의 자리수를 구하고 100 ~ 200의 값을 따로 구하면 됩니다. 

 

코드

num = int(input())
t = [1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000]

n = str(num)
length = len(n) - 1

result = 0

for i in range(1, length + 1):
    result += 9 * t[i-1] * i

result += (num - t[length] + 1) * len(n)

print(result)

4자리수가 들어왔다면 3자리수 까지의 결과를 먼저 구하고

3자리수가 들어왔다면 2자리수 까지의 결과를 먼저 구합니다.

그 이전의 자리수는 length 변수에 있습니다.

 

진짜 구해야 할 값은 그 수의 자리수를 뺀다음 +1을 해줍니다.(0도 포함시켜야 합니다.)

728x90