문제
https://www.acmicpc.net/problem/13458
13458번: 시험 감독
첫째 줄에 시험장의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 각 시험장에 있는 응시자의 수 Ai (1 ≤ Ai ≤ 1,000,000)가 주어진다. 셋째 줄에는 B와 C가 주어진다. (1 ≤ B, C ≤ 1,000,000)
www.acmicpc.net
풀이
dp로 풀었다.
우선 총 감독관이 커버할 수 있는 경우는 모두 1명으로 초기화 했고,
이후에 +c명까지 부감독관 한명씩 늘려주면 된다.
범위 체크만 잘해서 입력값의 한계까지 구한다음, dp배열에 접근하여 값만 더해주면 된다.
코드
from sys import stdin
n = int(input())
a = list(map(int, stdin.readline().rstrip().split()))
b, c = map(int, input().split())
# 초기화
d = [-1] * 1000001
person = 1
# 총 감독관 한명으로 커버 가능할때까지
while True:
if person <= b:
d[person] = 1
else:
break
person +=1
# person ~ person+b 명까지는 부감독이 1명 추가로 필요하다.
while True:
val = d[person - 1]
if person+c > 1000000:
for i in range(person, 1000001):
d[i] = val+1
break
for i in range(person, person+c):
d[i] = val+1
person += c
answer = 0
for val in a:
answer += d[val]
print(answer)
후기
입력값이 큰 친구들은 dp의심 !
'백준' 카테고리의 다른 글
17143 - 낚시왕 (0) | 2023.06.27 |
---|---|
17410 - 이차원 배열과 연산 (0) | 2023.06.26 |
13460 - 구슬 탈출 2 (0) | 2023.06.26 |
17144 - 미세먼지 안녕! (0) | 2023.06.25 |
16235 - 나무 재테크 (0) | 2023.06.23 |