-
[백준] 1748번 문제 (수 이어 쓰기 1) 파이썬(Python) 풀이Problem Solving/Baekjoon 2021. 8. 25. 11:49
https://www.acmicpc.net/problem/1748
n = int(input()) n_len = len(str(n)) count = 0 # 자리수 기반으로 개수를 구함 for i in range(n_len - 1): count += 9 * 10 ** i * (i + 1) # 자리수를 구하고 나머지 숫자를 구하고 출력 print(count + (n - 10 ** (n_len - 1) + 1) * n_len)
규칙이 있을 것이라 생각했지만 찾지는 못 했고 다른 사람의 풀이를 참고했다.
숫자 n에 대한 규칙은 다음과 같다.
자리수 1개인 경우에는 숫자가 1 ~ 9이고 1 ~ 9를 다 더하면 자리수가 9개
자리수 2개인 경우 .. 10 ~ 99 : .. 180개
자리수 3개인 경우 .. 100 ~ 999 : .. 2700개
자리수 4개인 경우 .. 1000 ~ 9999 : .. 36000개...
위와 같이 자리수를 기반으로 개수를 우선 구하면 아래와 같은 식이 성립된다.
# 자리수 기반으로 개수를 구함 for i in range(n_len - 1): count += 9 * 10 ** i * (i + 1)
숫자 120에 대한 숫자를 구하면 해당 for문이 끝나면 count = 189가 된다.(9 + 180)
그리고 자리수를 제외한 나머지 숫자를 구한다.
# 자리수를 구하고 나머지 숫자를 구하고 출력 print(count + (n - 10 ** (n_len - 1) + 1) * n_len)
해당 식을 거치면 189(기존 자리수를 기반으로 구한 숫자) + 63이 되서 252가 된다.
'Problem Solving > Baekjoon' 카테고리의 다른 글
[백준] 15655번 문제 (N과 M (6)) 파이썬(Python) 풀이 (0) 2021.08.25 [백준] 15654번 문제 (N과 M (5)) 파이썬(Python) 풀이 (0) 2021.08.25 [백준] 1107번 문제 (리모컨) 파이썬(Python) 풀이 (0) 2021.08.23 [백준] 2309번 문제 (일곱 난쟁이) 파이썬(Python) 풀이 (0) 2021.08.23 [백준] 1476번 문제 (날짜 계산) 파이썬(Python) 풀이 (0) 2021.08.23