[BOJ] 1748: 수 이어 쓰기 1

이슬비·2023년 11월 8일
0

Algorithm

목록 보기
101/110
post-thumbnail

1. 내 풀이: 성공

import sys

n = str(sys.stdin.readline().rstrip())
new = len(n)
n = int(n)

answer = 0

if n < 10:
        answer = n
        
if n > 10:
    for i in range(1, new):
        answer += (10**i - 10**(i-1)) * i
    answer += new * (n-10**(new-1)+1)
print(answer)

휴 ... 실버 4로 이렇게 와리가리 치다니 ...
예전에는 실버 1도 슉슉 풀어냈던 것 같은데 다시 차근 차근 쌓아가야겠다.

High-level idea는 다음과 같다.

  • 자리수 구함

    • 120의 경우, 세자리
  • 마지막 자리수 전까지 포함되는 모든 수들에 자리수를 곱하여 그 갯수를 더해줌

    • 세자리 숫자 120일 경우, 세자리 전인 두자리 10 ~ 99 / 1~9 의 개수를 구해주면 됨
  • 마지막 자리수는 해당 자리수의 끝까지 포함되지 않을 것이므로, 마지막 자리수는 주어진 만큼만 포함되는 숫자들을 구해 자리수를 곱해주고 더해줌

    • 즉, 세자리의 끝은 999이므로 n=120일 경우 100~120까지의 개수만 구해주면 됨
  • 끄읕

2. 다른 풀이

n = input()
result = 0
for i in range(1,len(n)):
    result+=9*10**(i-1)*i
result +=(int(n)-10**(len(n)-1)+1)*len(n)
print(result)

출처: https://hae-sooo97.tistory.com/61

내 코드도 충분히 줄일 수 있는데, 줄이면 유사한 흐름으로 흘러갈 것 같다.

3. 마치며

점수에 연연하지 말고 하나하나 차근차근 다시 내 코딩 머리 찾아가기!

profile
정말 알아?

0개의 댓글