[백준] 1019번: 책 페이지 문제 풀이 파이썬

현톨·2022년 11월 5일
0

Algorithm

목록 보기
30/42

문제 링크

https://www.acmicpc.net/problem/1019

첫번째 접근

당연히 틀리단걸 알지만 입력받은 수 N만큼 반복문을 돌면서 N의 자릿수 하나하나 딕셔너리에 저장하는 방식으로 접근했었다.
당연히 시간초과가 발생했고 굳이 딕셔너리에 저장할 필요도 없었다.

두번째 접근

자릿수가 늘어날 때마다 해당 자릿수의 숫자까지는 (자릿수 - 1) * 10 만큼 늘어난다.
입력받은 N의 1의 자릿수부터 페이지 수를 추가하되, 자릿수가 커질때마다 추가되는 페이지수를 10씩 곱해준다.

전체 코드

N = int(input())
arr = [0] * 10
num = 1
def make_nine(N):
    while N % 10 != 9:
        for i in str(N):
            arr[int(i)] += num
        N -= 1
    return N
# 1의 자릿수부터 num 만큼 증가시키며 연산한다.
# N을 10씩 나눠가며 현재 자릿수를 증가시킨다.
# 자릿수가 커질수록 num을 10씩 곱한다.
while N > 0:
    # N의 현재 마지막 자릿수를 9로 맞춰준다
    N = make_nine(N)
    if N < 10:
        for i in range(N + 1):
            arr[i] += num
    else:
        for i in range(10):
            arr[i] += (N // 10 + 1) * num
    arr[0] -= num
    num *= 10
    N //= 10
for i in range(0, 10):
    print(arr[i], end=' ')
profile
기록하는 습관 들이기

0개의 댓글