본문 바로가기

카테고리 없음

(삼성 기출) 시험 감독 - 백준

총 N개의 시험장이 있고, 각각의 시험장마다 응시자들이 있다. i번 시험장에 있는 응시자의 수는 Ai명이다.

감독관은 총감독관과 부감독관으로 두 종류가 있다. 총감독관은 한 시험장에서 감시할 수 있는 응시자의 수가 B명이고, 부감독관은 한 시험장에서 감시할 수 있는 응시자의 수가 C명이다.

각각의 시험장에 총감독관은 오직 1명만 있어야 하고, 부감독관은 여러 명 있어도 된다.

각 시험장마다 응시생들을 모두 감시해야 한다. 이때, 필요한 감독관 수의 최솟값을 구하는 프로그램을 작성하시오.

 

 

13458번: 시험 감독

첫째 줄에 시험장의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 각 시험장에 있는 응시자의 수 Ai (1 ≤ Ai ≤ 1,000,000)가 주어진다. 셋째 줄에는 B와 C가 주어진다. (1 ≤ B, C ≤ 1,000,000)

www.acmicpc.net


# 코드 구현

1. 주 감독관은 교실 별 한명씩 꼭 들어가야 하므로 우선 주감독관이 관리할 수 있는 학생 수 만큼 빼줌

2. 남은 아이들은 부감독관으로 나누어 올림함

   *이때 math.ceil 함수를 사용하였는 데 colab에서는 계산이 바르게 되었는 데 배준에서는 안되어서 우선 몫을 더해준 후 %sub이 0이상이라면(나누어 떨어지지 않는다면) 1을 더해주는 방식으로 올림을 구현해 주었음

1
2
3
4
5
6
7
8
9
10
11
12
13
import math
 
total = 0
for i in range(site):
    people[i] -= cap
    total += 1
    if people[i] > 0 :
        total += people[i]//sub
        if ( people[i] % sub ) > 0:
            total += 1
        # total += math.ceil(people[i]/sub)
print(total)
 
cs

# 느낀점

 - 비교적 쉽게 풀었다 !