https://www.acmicpc.net/problem/13458
각 시험장에 있는 응시자 수만큼만 반복문 돌리면 된다.
O(n)
총감독관 1명이 모든 응시자를 감독할 수 있는 경우 OR 부감독관도 필요한 경우를
잘 나누어 생각하면 좋다.
import math
# 시험장의 개수
n = int(input())
# 각 시험장에 있는 응시자 수
candidate = list(map(int, input().split()))
# b=총감독관, c=부감독관
b, c = map(int, input().split())
# 필요한 감독관의 최소 수
result = 0
for cand in candidate:
# 총감독관 혼자 감독이 가능한 상황이라면
if cand <= b:
result += 1
# 부감독관도 필요한 상황이라면
else:
result += math.ceil((cand-b) / c) + 1
print(result)
브론즈의 난이도 치고는 정답률이 꽤나 낮은 문제였다.
왜 그런지 궁금했는데 총감독관이 오직 "1명"만 있어야 한다. 라는 말을 "총감독관 <= 1"이라고 생각한 사람이 많았나보다.
나도 처음에는 총감독관 혼자 감독이 가능한 상황/부감독관도 필요한 상황을 세분화 하지 않고, 한 번에 구하려다보니 틀렸었다.
for 응시자 in 각 응시자 수:
result += math.ceil((응시자-총감독관이 감독할 수 있는 명 수) / 부감독관이 감독할 수 있는 명 수) + 1
이런 식으로 작성했었는데 응시자 수 < 총감독관이 감독할 수 있는 명 수 일 경우에는
계산값이 음수가 나오는 불상사가 생겼다.
문제를 꼼꼼하게 잘 읽고 경우의 수마다 나누는 연습이 필요할 것 같다.