[백준] 1748 수 이어 쓰기 1

김영현·2025년 4월 18일
0

백준

목록 보기
34/40
post-thumbnail

🌭 문제 설명

  • 1부터 N까지의 수를 이어서 쓰면 다음과 같이 새로운 하나의 수를 얻을 수 있다.

  • 1234567891011121314151617181920212223...

  • 이렇게 만들어진 새로운 수는 몇 자리 수일까? 이 수의 자릿수를 구하는 프로그램을 작성하시오.


🍗 제한 사항


🎁 입출력 예시

  • 첫째 줄에 N(1 ≤ N ≤ 100,000,000)이 주어진다.

  • 첫째 줄에 새로운 수의 자릿수를 출력한다.

😎 나의 풀이

left = [
  1,
  10,
  100,
  10000,
  100000,
  1000000,
  10000000,
  100000000,
  1000000000
]

right = [
  9,
  99,
  999,
  9999,
  99999,
  999999,
  9999999,
  99999999,
  999999999
]

N = int(input()) # N이 15면 

sum = 0

for i in range(len(left)):
  if N >= left[i] and N <= right[i]: # i가 1일 때 true
    sum += (N - left[i] + 1) * (i + 1)
    break
  else: # 1. 먼저 이거 실행 
    sum += (right[i] - left[i] + 1) * (i + 1)
    
# sum 에 +9 , +12 되서 sum은 21출력
print(sum)
    
  1. 처음엔 단순하게 join으로 문자열로 풀다가 당연히 시간초과가 났다.
  2. 문제의 범위 만큼 left, right 각 자릿수의 시작값과 끝값을 정의 한다.
  3. 자릿수 범위 만큼 for문을 돌고 , N이 현재 자릿수 범위에 해당하면 현재 자릿수 범위에서 남은 숫자 개수 * 자릿수를 더해준다.
  4. N이 현재 자릿수 범위보다 크면 현재 자리수 범위의 전체 숫자 개수 × 자리수를 더한다.
  5. N이 15면 1자리수는 1~9까지 → 9개 × 1자리 = 9 , 2자리수는 10~15까지 → 6개 × 2자리 = 12
    총합 = 9 + 12 = 21자리

  • 자릿수를 이해해야 풀 수 있던 문제였어서 처음에 좀 헤맸다.
profile
학생의 자세로 살아가는 개발자

0개의 댓글