알고리즘/시뮬레이션
[백준 13458 : PYTHON] 시험 감독
cijbest
2021. 6. 13. 21:57
문제 풀기 : 13458번
문제
총 N개의 시험장이 있고, 각각의 시험장마다 응시자들이 있다.
총감독관은 한 시험장에서 감시할 수 있는 응시자의 수가 B명이고, 부감독관은 한 시험장에서 감시할 수 있는 응시자의 수가 C명이다.
각각의 시험장에 총감독관은 오직 1명만 있어야 하고, 부감독관은 여러 명 있어도 된다.
각 시험장마다 응시생들을 모두 감시해야 한다. 이때, 필요한 감독관 수의 최솟값을 구하는 프로그램을 작성하라.
문제풀이
각각의 시험장의 감독관을 정할 때 총감독관을 먼저 배치한다. 총감독관이 감시할 수 있는 사람(B)을 시험장에 있는 사람을 다 커버할 수 있으면 감독관 수를 증가시키고 커버할 수 없으면 부감독관의 수를 구한다. 부감독관은 남은 사람들에서 부감독관이 감독할 수 있는 사람(C)만큼 나눈다. 나머지가 0이면 나눈 몫만큼이 부감독관 수가 되고 나머지가 0이 아니면 나눈 몫에 부감독관 한명을 더 추가시킨 것이 부감독관의 수가 된다.
예) 시험장 사람 : 15명, 부감독이 감시할 수 있는 사람 : 4 일때,
15 / 4 = 3(몫)...3(나머지)
필요한 부감독수 : 4명
전체코드
import sys
sys.stdin.readline
# INPUT
N = int(input())
data = list(map(int, input().split()))
B, C = map(int, input().split())
# 감독관 수
cnt = 0
for d in data:
# 총감독이 감독할 수 있는 사람 빼기
d -= B
# 아직 감독해야할 사람이 있는 경우
if d > 0:
# 부감독관이 감독할 수 있는 사람이 딱 떨어지는 경우(총감독관 1명 포함)
if (d/C) == int(d/C):
cnt += 1 + (d/C)
# 부감독관이 감독할 수 있는 사람보다 조금 더 있는 경우(총감독관 1명 포함)
else:
cnt += 1 + int(d/C) + 1
# 총감독만으로 시험장 감독이 가능한 경우
else:
cnt += 1
print(int(cnt))
반응형