Notice
Recent Posts
Recent Comments
Today
Total
04-30 00:02
Archives
관리 메뉴

Jeongchul Kim

백준 삼성 코딩 기출 문제 - 시험 감독 python 본문

Algorithm

백준 삼성 코딩 기출 문제 - 시험 감독 python

김 정출 2019. 10. 17. 13:39

백준 삼성 코딩 기출 문제 - 시험 감독 python



출처 : BAEKJOON ONLINE JUDGE

시험 감독(https://www.acmicpc.net/problem/13458)


문제 설명

N개의 시험장이 있고, i번 시험장에 있는 응시자의 수의 A_i명이 있습니다. 총 감독관이 감시할 수 있는 응시자의 수 B명, 부감독관은 C명입니다. 시험장에 총감독관은 오직 1명만 있어야 하고, 부감독관은 여러명 있어도 됩니다. 필요한 감독관 수의 최솟값을 구하는 프로그램을 작성합니다.


문제 풀이

[1] 우선 입력값을 받아 들입니다.

N = int(input()) # 시험장 개수
applicant = list(map(int, input().split())) # 시험장에 응시자의 수(리스트)
B, C = map(int, input().split()) # 총감독관(B), 부감독관(C)
answer = 0


[2] 총감독관 명수 구하기 : 시험장에는 무조건 한 명의 총감독관이 필요합니다.

시험장의 개수를 의미하는 N개에 1명씩 필수적으로 들어가니 다음과 같겠죠.

기본적으로 answer += N


[3] 부감독관 명수 구하기 : 시험장에 응시자의 수가 저장된 리스트를 돌면서 확인합니다.

 - 응시자의 수(num)가 총감독관(B) 보다 적다면? 부감독관의 수를 구할 필요가 없죠.

 - 응시자의 수가 총감독관보다 많다면 부감독관의 수를 구해야 합니다.

 - 부감독관의 수는 (응시자의 수 - 총감독관) / 부감독관 감시 수로 구할 수 있습니다.
- 이 때 나누어 떨어지는 경우는 값이 맞으나, 나머지가 발생하는 경우 부감독관 한 명이 더 있어야 합니다.

for num in applicant:
    if num >= B:
        num -= B # 총감독관은 B명
        if num % C == 0: # 남은 응시자의 수에서 부감독관(C)를 나눈다.
            answer += num // C
        else:
            answer += num // C + 1


전체 코드

N = int(input())
applicant = list(map(int, input().split()))
B, C = map(int, input().split())
answer = 0

for num in applicant:
    if num >= B:
        num -= B # 총감독관은 B명
        if num % C == 0: # 남은 응시자의 수에서 부감독관(C)를 나눈다.
            answer += num // C
        else:
            answer += num // C + 1
           
print(answer + N) # 총감독관은 무조건 배치 된다.


Comments