BOJ-백준 1748번 수 이어 쓰기 1 Python 문제 풀이 입니다.
링크 : https://www.acmicpc.net/problem/1748
✅ Python 정답 코드 입니다. 더보기 클릭!
n = int(input())
nn = n
count = 0
while nn>0:
nn = nn//10
count+=1
ans = 0
for c in range(1,count):
ans += (10**(c)-10**(c-1)) * c
ans +=((n+1)-10**(count-1)) * (count)
print(ans)
📌 해설
1-9까지는 자릿수가 1씩 증가하고, 10-99가지는 자릿수가 2씩 증가하고 100 - 999까지 자릿수가 3씩 증가합니다.
N이 주어졌을때 1 - N까지 123456789101112 .. N-1N이라는 새로운 수의 길이가 얼마인지 구하는 문제입니다.
🚩 주의
N이 최대 100,000,000 까지 주어질 수 있으므로
1부터 N까지 모든 수를 문자열에 하나하나 더해서 문자열의 len()을 구하면 시간 초과되므로
효율적으로 구하는 방법을 고민해야하는 문제입니다.
n = int(input())
nn = n
count = 0
while nn>0:
nn = nn//10
count+=1
1. n을 입력받고 n의 자릿수를 구합니다.
2. nn을 통해 자릿수를 구해 count에 저장합니다. (len(str(n)) 으로 구하는 방법도 있습니다.)
ans = 0
for c in range(1,count):
ans += (10**(c)-10**(c-1)) * c
ans +=((n+1)-10**(count-1)) * (count)
print(ans)
3. 1-9 까지 9개의 수가 있고 1씩 증가하며 자릿수를 증가시킵니다.
10-99 까지 90개의 수가 있고 2씩 증가하며 자릿수를 증가시킵니다.
100-999 까지 900개의 수가 있고 3씩 증가시키며 자릿수를 증가시킵니다.
이를 식으로 바꾸면
으로 변경 할 수 있습니다. ( C : 자릿수 )
4. N자리의 수를 마지막에 ans에 합산한 뒤 답을 출력합니다.
만약 N이 120이라면
for 문을 통해
1-9까지 9개의 수를 1씩 증가시켜 ans에 합산,
10-99까지 90개의 수를 2씩 증가시켜 ans에 합산하고 for 문을 종료 한뒤
100-120까지 20개의 수를 3씩 증가시켜 ans에 합산하면 자릿수를 효율적으로 구할 수 있습니다.
::
'✅ 문제풀이' 카테고리의 다른 글
BOJ-백준 11727번 2xn 타일링 2 C++ (0) | 2021.10.17 |
---|---|
BOJ-백준 11726번 2xn 타일링 C++ (0) | 2021.10.17 |
BOJ-백준 6064번 카잉 달력 Python (0) | 2021.10.16 |
BOJ-백준 10989번 수 정렬하기 3 (0) | 2021.10.15 |
BOJ-백준 2751번 수 정렬하기 2 (0) | 2021.10.14 |