코딩하는 덕구 🐶

108. [삼성기출4] Python 백준 13458 번 시험 감독 자세한 설명 본문

알고리즘 문제 풀이

108. [삼성기출4] Python 백준 13458 번 시험 감독 자세한 설명

코딩하는 덕구 🐶 2023. 3. 18. 16:45
728x90
반응형

안녕하세요 코딩하는 덕구입니다.

백준 13458 번 시험 감독 입니다.

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

 

먼저 백준 13458 번 시험 감독 파이썬 정답 코드입니다. 설명은 아래에 있습니다.

N = int(input())
A = list(map(int, input().split()))
B, C = map(int, input().split()) #B = 총 감독, C = 부 감독

total = 0 #감독관들의 수

for a in A:
    if a - B <= 0: #총감독 1명만 필요한 경우
        total += 1 #총감독 1명
    else: #총감독 1명, 부감독 필요한 경우
        if (a - B) <= C: #총감독 1명 , 부감독 1명만 필요한 경우
            total += 1 #총감독 1명
            total += 1 #부감독 1명

        else: # 총감독1 명, 부감독 여러명 필요한 경우
            if (a - B) % C == 0: #(총학생 - 총감독) /부감독 = 나누어 떨어지는 경우
                total += int((a - B) / C) # 부감독 수
                total += 1 #총 감독 수
            else: #(총학생 - 총감독) / 부감독 = 나머지가 있는 경우
                total += 1 + int((a - B) / C) #부감독 수
                total += 1 #총감독 수
print(total) #필요한 감독관 수

 

문제 요약

각 반마다 총 감독관이 1명 있어야 됩니다.

총감독관과 부감독관이 관리 할 수 있는 학생 수는 다르며, 

N개의 반마다 다른 수 의 학생들이 존재합니다.

모든 학생을 관리하기 위한 감독관들의 합의 최소를 구합니다. 

 

 

문제 접근

모든 반을 돌면서 감독관 최소수를 구해서 더 합니다.

이때 경우를 나누어

1. 총 감독관 1명으로 충분한 경우 

2. 총 감독관 1 명, 부 감독관 1명이 필요한 경우

3. 총 감독관 1 명, 부 감독관 여러명이 필요한 경우

각각 계산해서 더 합니다.

 

Python 코드 구현

먼저 반 N

반별 학생수 A

총감독이 관리 할 수 있는 학생수 B

부감독이 관리 할 수 있는 학생수 C 를 입력받고, 최소 감독관 수를 저장할 total 을 선언하고 초기화 합니다.

N = int(input())
A = list(map(int, input().split()))
B, C = map(int, input().split()) #B = 총 감독, C = 부 감독

total = 0 #감독관들의 수

 

모든 반을 돌면서

for a in A:

 

1. 총감독 1명만 필요한 경우

if a - B <= 0: #총감독 1명만 필요한 경우
    total += 1 #총감독 1명

 

2. 총감독 1명, 부감독 필요한 경우에서

else: #총감독 1명, 부감독 필요한 경우

 

 총감독 1명, 부감독 1명만 필요한 경우

if (a - B) <= C: #총감독 1명 , 부감독 1명만 필요한 경우
    total += 1 #총감독 1명
    total += 1 #부감독 1명

 

 총감독 1명, 부감독 여려명 필요한 경우에서

else: # 총감독1 명, 부감독 여러명 필요한 경우

 

학생 수에서 총감독이 관리 가능한 수를 뺀 숫자가 부 감독 수로 나누어지는 경우

if (a - B) % C == 0: #(총학생 - 총감독) /부감독 = 나누어 떨어지는 경우
    total += int((a - B) / C) # 부감독 수
    total += 1 #총 감독 수

 

학생 수에서 총감독이 관리 가능한 수를 뺀 숫자가 부 감독 수로 나누어지지 않아 한명 더 필요한 경우

else: #(총학생 - 총감독) / 부감독 = 나머지가 있는 경우
    total += 1 + int((a - B) / C) #부감독 수
    total += 1 #총감독 수

를 각각 구현해서 반별로 계산 한 후 

 

출력하면 됩니다.

print(total) #필요한 감독관 수

 

 

파이썬 백준 13458 번 시험 감독 최종 코드입니다.

N = int(input())
A = list(map(int, input().split()))
B, C = map(int, input().split()) #B = 총 감독, C = 부 감독

total = 0 #감독관들의 수

for a in A:
    if a - B <= 0: #총감독 1명만 필요한 경우
        total += 1 #총감독 1명
    else: #총감독 1명, 부감독 필요한 경우
        if (a - B) <= C: #총감독 1명 , 부감독 1명만 필요한 경우
            total += 1 #총감독 1명
            total += 1 #부감독 1명

        else: # 총감독1 명, 부감독 여러명 필요한 경우
            if (a - B) % C == 0: #(총학생 - 총감독) /부감독 = 나누어 떨어지는 경우
                total += int((a - B) / C) # 부감독 수
                total += 1 #총 감독 수
            else: #(총학생 - 총감독) / 부감독 = 나머지가 있는 경우
                total += 1 + int((a - B) / C) #부감독 수
                total += 1 #총감독 수
print(total) #필요한 감독관 수

 

백준 13458 번 시험 감독 자세한 설명 및 Python 코드였습니다.

감사합니다.

728x90
반응형