하루살이 개발자

[백준] 13458 시험 감독 (by Python) 본문

코딩테스트

[백준] 13458 시험 감독 (by Python)

하루살이 2023. 3. 20. 22:51

문제(브론즈2)

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

 

문제설명

문제는 쉬워보이는데 정답률이 매우 낮은 문제다.. 나는 한 번에 맞겠지! 하고 채점했는데 나 역시 틀려버림 ㅎ.ㅎ

 

총감독관은 1명당 b명씩 관리할 수 있고 1명만 존재, 부감독관은 1명당 c명씩 관리할 수 있고 여려명 존재 가능

각 room 별로 총감독관이 관리하는 학생 수(c) 빼고, 나머지 학생들에 대해 연산을 통해 부감독관을 배치했다.

# 목표) 감독관 최소 수 찾기

import sys
input = sys.stdin.readline

room_num = int(input())

people_nums = list(map(int, input().split()))

b, c = map(int, input().split()) # 총감독관, 부감독관

count = 0 # 감독관 수
for i in range(len(people_nums)):
    if people_nums[i] >= b:
        count += 1
        people_nums[i] -= b
    else: # 총감독관이 감독할 수 있는 학생 수 > room 당 학생수 일 경우 예외처리
        count += 1
        continue

    if people_nums[i]:
        count += people_nums[i] // c # c명씩 부감독관 1명 할당
        if people_nums[i] % c != 0: # c보다 작은 나머지 인원 부감독관 1명 할당
            count += 1

print(count)

총감독관이 감독할 수 있는 학생 수 > room 당 학생수 일 경우 예외처리를 안해줘서 틀렸다.

예외처리를 안했을 경우 반례는 다음과 같다.

# 반례
1
5
100 1

# output 
-94