눈송이의 개발생활

[BOJ]1748 - 수 이어 쓰기 1 (Python) 본문

Algorithm/BOJ

[BOJ]1748 - 수 이어 쓰기 1 (Python)

꾸지새미언니

문제 

https://www.acmicpc.net/problem/1748

코드 

import sys
input = lambda : sys.stdin.readline().strip()

n = input()
answer = 0
length = len(n) - 1
for i in range(length):   # i는 0부터 시작 ~ 자릿수보다 하나 작은거까지
    answer += (i+1) * 9 * (10 ** i)

answer +=  (length + 1) * ((int(n) - (10 ** length)) + 1)
print(answer)

 

풀이 

그리디 유형 문제 중 처음으로 아무런 힌트 없이 쉽게 풀 수 있는 문제였다 

예시를 보면 쉽게 패턴을 찾을 수 있다

15 → 123456789 + 101112131415

15를 예로 들면, 1자리 수의 숫자들의 자릿수는 9이다 

그리고 15이상의 모든 숫자들이 9 이상의 자릿수를 갖는다는 것을 알 수 있다 

120 → 1~9 + 10~99 + 100~120

120을 보면 9 + 90 + 21 의 식으로 자릿수를 계산할 수 있다 

 

위와 같이 패턴을 찾다보면 1자리 수는 9, 2자리 수는 90, 3자리 수는 900 이렇게 10^n 만큼 9에 곱해서 더해진다는 것을 알 수 있다 

그래서 (입력받은 숫자의 자리수 - 1)까지는 위의 패턴을 적용한 코드를 쓰면 되고, 가장 큰 자릿수는 따로 계산해서 더해준다 

 

 

Comments