[백준] 1748번 (python 파이썬) 수 이어 쓰기1

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

728x90
반응형

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이다.

728x90

노란부분이 핵심 포인트이다.

앞부분에서 시작하는 숫자를 빼준 후 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로 이루어지게 리셋, 위와 합쳐도 상관 없을 것 같다.
728x90
반응형