출처 : 백준, https://www.acmicpc.net/problem/1748
1748번: 수 이어 쓰기 1
첫째 줄에 N(1 ≤ N ≤ 100,000,000)이 주어진다.
www.acmicpc.net
더보기
풀이
if __name__ == '__main__':
n = input()
length = len(n)
try:
down_n = int("9" * (length - 1))
except:
down_n = 0
ans = 0
for i in range(1, length):
try:
ans += (int('9' * i) - int('9' * (i-1))) * i
except:
ans += int('9' * i) * i
ans += (int(n) - down_n) * length
print(ans)
들어온 글자의 자릿수 length를 구한 후, 거기서 한자리를 뺐을 때의 최댓값 '9' * (length - 1)을 구하고 정수로 바꾼다.
그 후 1부터 length까지 돌면서 ans에 각 자리수별 숫자 개수 * 자릿수를 더해준다.
try ~except문의 경우 int 함수 내의 문자열이 빈 문자열일 경우 에러가 발생하기 때문에 이때 0을 넣어주는 에러 처리이다.
시간 복잡도
-
다른 사람의 풀이를 보면서 알게 된 점
수 범위가 1 ≤ N ≤ 100,000,000로 명확해서 하드코딩하신 분도 많더라.
그게 더 편했을 듯.
고찰
-
'알고리즘 > Python' 카테고리의 다른 글
[python] 백준 15651 - N과 M (3) (0) | 2022.03.28 |
---|---|
[python] 백준 15650 - N과 M (2) (0) | 2022.03.28 |
[python] 백준 1012 - 유기농 배추 (0) | 2022.03.28 |
[python] 백준 6064 - 카잉 달력 (0) | 2022.03.28 |
[python] 백준 14500 - 테트로미노 (0) | 2022.03.28 |