눈송이의 개발생활
[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)까지는 위의 패턴을 적용한 코드를 쓰면 되고, 가장 큰 자릿수는 따로 계산해서 더해준다
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ]15988 - 1, 2, 3 더하기 3 (Python) (0) | 2022.01.17 |
---|---|
[BOJ]1406 - 에디터 (Python) (0) | 2022.01.15 |
[BOJ]1476 - 날짜 계산 (Python) (0) | 2022.01.11 |
[BOJ]3085 - 사탕 게임 (Python) (0) | 2022.01.11 |
[BOJ]6588 - 골드바흐의 추측 (Python) (0) | 2022.01.11 |
Comments