https://www.acmicpc.net/problem/1019
백준의 1019번 문제인, 책 페이지이다. 다이나믹 프로그래밍을 통해 접근하면 어렵지 않게 풀 수 있다.
[전체 코드]
#백준 1019: 책 페이지
n = int(input())
num = [0] * 10
start = 1
end = n
factor = 1
#start가 end보다 작거나 같을 때까지 반복
while start <= end: #start가 end보다 작거나 같을 때까지 반복
while start % 10 != 0 and start <= end: #start가 10으로 나누어 떨어지지 않고 start가 end보다 작거나 같을 때까지 반복
for i in str(start): #start 값 str으로 변환 후 대입
num[int(i)] += factor
start += 1 #이동
if start > end: #start가 end보다 크면 반복문 종료
break
while end % 10 != 9 and start <= end: #end가 9로 나누어 떨어지지 않고 start가 end보다 작거나 같을 때까지 반복
for i in str(end): #end값 변환 후 대입
num[int(i)] += factor #num에 factor값 대입
end -= 1 #이동
start //= 10 #start를 10으로 나눈 몫을 대입
end //= 10 #end를 10으로 나눈 몫을 대입
for i in range(10): #0부터 9까지 반복
num[i] += (end - start + 1) * factor
factor *= 10
#출력
for i in num:
print(i, end=' ')
풀이법: 다이나믹 프로그래밍
핵심 아이디어: 페이지 번호의 범위를 나눈다는 것, 자리수별로 나누어 분할로 계산하고 누적시킨다는 것 (해당 방법이 아닌 다른 방법으로 접근 시에 시간 초과가 될 수 있으니 주의하기!)
반응형
'IT > Algorithm' 카테고리의 다른 글
[python] 백준 1024: 수열의 합 (0) | 2025.03.15 |
---|---|
[python] 백준 1011: Fly me to the Alpha Centauri (0) | 2025.03.15 |
[c] 구조체를 정의하고, 데이터들을 입력받아 결과값을 산출하기 (0) | 2023.12.13 |
[c] 연산 구조체를 정의하고, 변수를 생성하여 구조체를 반환하기 (0) | 2023.12.12 |
[python] 백준 2822 : 점수 계산 (1) | 2023.12.11 |