[백준] 1951번 활자 (Python)
Posted: Updated:
문제
풀이
N을 입력받아 1부터 N까지 숫자를 표현하기 위해 필요한 활자 수를 구하는 문제이다.
N을 표현하는 데 필요한 활자 수만 구하는 것이 아니라, N까지의 모든 수를 표현하기 위한 활자 수를 구해야 하므로 살짝 복잡하다.
처음에는 나머지를 이용하여 풀려고 했지만, 정답이 아닌 것 같아서 빠르게 포기했다.
내가 한 풀이의 핵심은 자릿수에 있다.
1부터 9까지는 숫자 당 1개씩, 10부터 99까지는 숫자 당 2개씩, 100부터 999까지는 숫자 당 3개씩, … 100,000,000부터 999,999,999까지는 숫자 당 9개씩이다.
즉, 각 자릿수에 따라 필요한 활자 수를 미리 계산할 수 있다.
미리 계산한 값에서 필요한 자릿수만큼 합하고, 나머지 표현해야 하는 숫자들에 필요한 활자 수를 계산해주면 된다.
소스코드
N = int(input())
s = str(N)
li = [9, 90*2, 900*3, 9000*4, 90000*5, 900000*6, 9000000*7, 90000000*8, 900000000*9]
r = 0
for i in range(len(s)-1):
r += li[i]
r += len(s) * (N - 10**(len(s)-1) + 1)
print(r % 1234567)
댓글남기기