[Python][Silver 4][1748] 수 이어쓰기 1

2025. 3. 15. 18:30·BAEKJOON

|    문제

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

1234567891011121314151617181920212223...

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

 

|    입력

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

 

 

|    출력

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

 

 


정답 코드

import sys
input = sys.stdin.readline

class Solution:
    # 메모리 초과
    def relay_number_(self):
        n = int(input())
        nums = ''.join(map(str, range(1,n+1)))
        print(len(nums))
    # 시간 초과
    def relay_number__(self):
        n = int(input())
        res = 0
        for i in range(1, n+1):
            res += len(str(i))
        print(res)

    def relay_number(self):
        n = input().strip() # 12
        x = len(n) # 2
        res = 0
        for i in range(1, x):
            res += 9 * i * (10**(i-1))
        
        res += (int(n) - 10**(x-1) + 1) * x
        print(res)

if __name__ == "__main__":
    s = Solution()
    s.relay_number()

 

 

|    비고

0.15초의 시간 제한이 있는 문제라서 일반적인 방식으로는 메모리 초과와 시간 초과를 피할 수 없었다. 구글링을 하던 중 규칙을 발견할 수 있게 되었다.
먼저, 1부터 9까지는 한 자리 숫자이기 때문에, 예를 들어 입력값이 9라면 9자리 숫자가 된다. 두 자리 숫자는 10부터 99까지 총 90개 이므로 입력값이 99라면 9 + 90 * 2 = 189가 출력값이 된다. 만약 n의 자릿수를 x라고 한다면, 이전(x-1) 자릿수 9 * x * 10 ** (x-1) 공식에다가 현재(x) 자릿수 공식인 (n - 10**(x-1) + 1) * x를 더한 값이 출력값이 된다.
예를 들어, 12의 경우 자릿수는 2이며, 이전 한 자릿수 9 * 1 * 10 ** 0 = 9에다가, 현재 자릿수 공식인 (12 - 10**1 + 1) * 2  = 6을 더하여 답이 15가 된다. 
123456789101112

 

 

'BAEKJOON' 카테고리의 다른 글

[Python][Gold 5][1107] 리모컨  (0) 2025.03.15
[Python][Silver 1][24542] 튜터-튜티 관계의 수  (0) 2025.02.25
[Python/Gold2/2696] 중앙값 구하기  (0) 2025.02.12
[Python/Gold2/1655] 가운데를 말해요  (0) 2025.02.12
[Python/Gold2/1167] 트리의 지름  (0) 2025.02.09
'BAEKJOON' 카테고리의 다른 글
  • [Python][Gold 5][1107] 리모컨
  • [Python][Silver 1][24542] 튜터-튜티 관계의 수
  • [Python/Gold2/2696] 중앙값 구하기
  • [Python/Gold2/1655] 가운데를 말해요
콘순이
콘순이
개발 보안 관련 스터디 기록장
  • 콘순이
    SECURITY DEVELOPER
    콘순이
  • 글쓰기 관리
  • 전체
    오늘
    어제
    • 분류 전체보기 (69)
      • BAEKJOON (45)
      • ALGORITHM (4)
      • QUALIFICATIONS (0)
      • PYTHON (1)
      • PROGRAMMERS (6)
      • DEVELOP (10)
        • SPRING (4)
        • ERROR (0)
        • CONCEPT (5)
        • AWS (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    비트 마스킹
    비트 조작
    문자열
    알고리즘
    solid
    Python
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
콘순이
[Python][Silver 4][1748] 수 이어쓰기 1
상단으로

티스토리툴바