노베이스 알고리즘 공부 #14. 백준 13458 시험 감독 - Python

Anny·2024년 4월 14일
0

https://www.acmicpc.net/problem/13458

1. 문제

-- 총 N개의 시험장이 있고, 각각의 시험장마다 응시자들이 있다. i번 시험장에 있는 응시자의 수는 Ai명이다.
-- 감독관은 총감독관과 부감독관으로 두 종류가 있다.
-- 총감독관이 한 시험장에서 감시할 수 있는 응시자의 수 == B
-- 부감독관이 한 시험장에서 감시할 수 있는 응시자의 수 == C
-- 각각의 시험장에 총감독관은 오직 1명만 있어야 하고, 부감독관은 여러 명 있어도 된다.
-- 각 시험장마다 응시생들을 모두 감시해야 한다. 이때, 필요한 감독관 수의 최솟값을 구하시오

입력

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

2. 풀이

2-1. 접근

당연하겠지만 총감독관을 각 시험장에 한명씩 배치, 총감독관이 감시할 수 있는 학생수를 제외한 남은 학생 수를 부감독관이 감시할 수 있는 학생수로 나누고 몫이 0일경우 1, 나머진 몫들을 더해준다!

돌아가면서 하나씩 빼기를 진행해야 한다 -> For문과 List 사용
왜냐면 내가 제일 익숙하니까,,,

아니 개어렵다 난 아무래도 여러 단계가 필요하면 뇌정지부터 오는듯

단계 별로 풀어보기

2-2. 입력받기, 총 응시자 수 - 감독관이 감시할 수 있는 응시자 수

-- 총감독관이 한 시험장에서 감시할 수 있는 응시자의 수 == B
-- 부감독관이 한 시험장에서 감시할 수 있는 응시자의 수 == C
-- 응시자의 수 == A

N = int(input())
A = list(map(int, input().split()))
B, C = map(int, input().split())

def Cal_supervisors(N, A, B, C):
	total_supervisors = 0
    
	for i in range(N):
    	remaining_candidates = A[i] - B
        total_supervisors += 1

2-3. 부감독관이 필요한 경우

if remaining_candidates > 0:
            if C % remaining_candidates == 0:
                total_supervisors += remain_candidates // C
            else:
            	total_supervisors += remaining_candidates // C + 1

return total_supervisors

2-4. 합체

N = int(input())
A = list(map(int, input().split()))
B, C = map(int, input().split())

def calculate_supervisors(N, A, B, C):
    total_supervisors = 0
    
    for i in range(N):
        remaining_candidates = A[i] - B
                total_supervisors += 1
        
        if remaining_candidates > 0:
            if remaining_candidates % C == 0:
                total_supervisors += remaining_candidates // C
            else:
                total_supervisors += remaining_candidates // C + 1
    
    return total_supervisors

result = calculate_supervisors(N, A, B, C)
print(result)

그렇게 정답,,

profile
Newbie

0개의 댓글