문제
https://www.acmicpc.net/problem/1748
풀이
# 백준 / 실버4 / 수 이어 쓰기 1
n = int(input())
if n // 10 == 0:
print(n)
elif n // 100 == 0:
print(2*(n-9) + 9)
elif n // 1000 == 0:
print(3*(n-99) + 189)
elif n // 10000 == 0:
print(4*(n-999) + 2889)
elif n // 100000 == 0:
print(5*(n-9999) + 38889)
elif n // 1000000 == 0:
print(6*(n-99999) + 488889)
elif n // 10000000 == 0:
print(7*(n-999999) + 5888889)
elif n // 100000000 == 0:
print(8*(n-9999999) + 68888889)
elif n // 1000000000 == 0:
print(9*(n-99999999) + 788888889)
일반 for문을 돌리면 시간 초과가 발생한다 (0.15초) n의 범위가 1~1억이므로 당연한 결과
그냥 자리수가 바뀔 때마다 더해지는 값의 변동이 생기므로 자리수까지의 합을 하드코딩 해준다.
(ex. 3자리 -> n에서 -99를 빼준 값에 3을 곱하고 1~99까지의 길이를 더해준다.)
'알고리즘 > 백준' 카테고리의 다른 글
백준 11478 - 서로 다른 부분 문자열의 개수 (0) | 2024.06.09 |
---|---|
백준 2003 - 수들의 합 2 (0) | 2024.06.07 |
백준 1003 - 피보나치 함수 (0) | 2024.06.05 |
백준 2579 - 계단 오르기 (0) | 2024.06.04 |
백준 1120 - 문자 (0) | 2024.06.03 |