2021. 3. 24. 01:35ㆍ발돋움/알고리즘

n이 입력받은 자연수이고 size는 len(str(n)) 이라한다하면 자릿수의 규칙은
1 ~ 9 : 1 = (n - 10**(size-1) + 1) * size
10 ~ 99 : 2 = (n - 10**(size-1) + 1) * size
100 ~ 999 : 3 = (n - 10**(size-1) + 1) * size
1000 ~ 9999 : 4 = (n - 10 **(size-1) + 1)* size
'
'
'
위와같은 형태이다.
조금 더 쉽게 바꾸면 120의 자릿수는
1 ~ 9 : (9 - 1 + 1) * 1 = 9
10 ~ 99 : (99 - 10 + 1) * 2 = 180
100 ~ 120 : (120 - 100 + 1) * 3 = 63
자릿수를 모두 더하면 252이다.
노란부분이 핵심 포인트이다.
앞부분에서 시작하는 숫자를 빼준 후 1을 더해주면 되는데,
가장 큰 자릿수만 시작하는 숫자를 빼주고 나머지는 9로 이루어진 형태로 n을 리셋해주면 된다.
예를 들면,
120에서 가장 큰 자릿수는 100의 자리고 자릿수는 3이다.
100부터 120까지의 자릿수를 합하면 3 * 21 = 63이다.
그 다음으로 큰 자릿수는 10의 자리인데 99까지보면 된다.
또 그 다음으로 큰 자릿수는 1의 자리인데 9까지 보면 된다.
이런 규칙으로 나는 아래와 같이 코드를 짰다.
n = int(input())
size = len(str(n))
cnt = 0
charn = '9'
while True:
if size == 0:
print(cnt)
break
cnt += (n - 10**(size-1) + 1) * size
size -= 1 # 자릿수 빼주기
if size != 0: # 위에서 미리 빼주기 때문에 자릿수가 0이 아닐때만 실행해야 오류가 안난다.
charn = '9' * size
n = int(charn) # 숫자를 9로 이루어지게 리셋, 위와 합쳐도 상관 없을 것 같다.'발돋움 > 알고리즘' 카테고리의 다른 글
| [백준] 1929번 (python 파이썬) 소수구하기 (0) | 2021.03.25 |
|---|---|
| [백준] 17425번 (python 파이썬) 약수의 합 (0) | 2021.03.25 |
| [백준] 1107번 (python 파이썬) 리모컨 (0) | 2021.03.23 |
| [백준] 1476번 (python 파이썬) 날짜계산 (0) | 2021.03.23 |
| [백준] 3085번 (python 파이썬) 사탕게임 (0) | 2021.03.23 |