반응형
문제
https://www.acmicpc.net/problem/1748
코드
n = int(input())
len_n = len(str(n))
cnt = 0
for i in range(len_n - 1):
cnt += 9 * 10 ** i * (i+1)
print(cnt + (n - 10 ** (len_n - 1) + 1) * len_n)
설명
단순하게 수를 구해서 푸는 문제라기엔 주어진 범위가 넓어서 규칙성을 찾아야 했다.
혼자서는 찾지 못해서 검색을 통해 해결했다.
n의 규칙은 이렇다.
자릿수 1개의 경우: 숫자는 1~9까지 존재, 모두 더하면 자리수가 9개
자릿수 2개의 경우: 숫자는 10~99까지 존재, 자릿수는 180개
자리수 3개의 경우: 숫자는 100~999까지 존재, 자리수는 2700개
...
자릿수에 따른 규칙을 발견할 수 있다.
따라서 반복문으로 자릿수에 맞는 개수를 우선 구해주고(1단위면 1번, 10단위면 2번...)
자리수 외의 나머지 숫자를 구해서 출력한다.
반응형
'개발 연습장 > 백준 문제풀이' 카테고리의 다른 글
[파이썬, Python] 백준 11652: 카드 (0) | 2023.06.12 |
---|---|
[파이썬, Python] 백준 1057: 토너먼트 (0) | 2023.06.09 |
[파이썬, Python] 백준 9613: GCD 합 (0) | 2023.06.07 |
[파이썬, Python] 백준 2960: 에라토스테네스의 체 (0) | 2023.06.05 |
[파이썬, Python] 백준 10610: 30 (0) | 2023.06.02 |