728x90
이 문제에서는 여러 시험장이 있고, 각 시험장마다 응시자의 수가 주어진다. 각 시험장에는 반드시 총감독관이 1명 있어야 하며, 총감독관은 최대 B명의 응시자를 감독할 수 있다. 추가로 필요한 경우 부감독관을 여러 명 배치할 수 있으며, 부감독관 한 명은 최대 C명의 응시자를 감독할 수 있다.
모든 응시생을 감독하기 위해 필요한 최소한의 감독관 수를 계산하는 것이다.
해결 방법: 수학적 계산을 통한 최적화
이 문제는 각 시험장마다 필요한 감독관의 수를 계산하여 합산하면 된다. 중요한 점은 각 시험장마다 반드시 총감독관이 1명 있어야 한다는 것이다.
구현 단계
- 입력 받기
- 시험장의 수 N과 각 시험장마다의 응시자 수 A_i를 입력받는다.
- 총감독관이 감독할 수 있는 응시자 수 B와 부감독관이 감독할 수 있는 응시자 수 C를 입력받는다.
- 필요한 감독관 수 계산
- 각 시험장마다 다음을 수행한다:
- 총감독관이 감독할 수 있는 응시자 수 B를 응시자 수 A_i에서 빼준다.
- 남은 응시자 수가 0 이하이면 총감독관 1명만 필요하다.
- 남은 응시자 수가 0보다 크면 부감독관이 필요하다.
- 필요한 부감독관의 수는 (남은 응시자 수) / C를 올림한 값이다.
- 해당 시험장에서 필요한 감독관의 총 수는 1(총감독관) + 부감독관 수이다.
- 각 시험장마다 다음을 수행한다:
- 총 감독관 수 합산
- 모든 시험장에서 필요한 감독관 수를 합산하여 최종 결과를 출력한다.
정답 코드(Python)
import sys
import math
def main():
N = int(sys.stdin.readline())
A = list(map(int, sys.stdin.readline().split()))
B, C = map(int, sys.stdin.readline().split())
total_supervisors = 0
for candidates in A:
# 총감독관 한 명 배치
total_supervisors += 1
remaining = candidates - B
if remaining > 0:
# 부감독관 수 계산 (올림)
total_supervisors += math.ceil(remaining / C)
print(total_supervisors)
if __name__ == "__main__":
main()
코드 설명
- 입력 처리
- sys.stdin.readline()을 사용하여 입력을 효율적으로 받는다.
- 응시자 수 리스트 A와 감독관의 능력 B, C를 입력받는다.
- 감독관 수 계산
- 총감독관은 반드시 1명 배치하므로 total_supervisors += 1을 해준다.
- 응시자 수에서 총감독관이 감독할 수 있는 수 B를 빼고 남은 응시자 수를 계산한다.
- 남은 응시자 수가 0보다 크면 부감독관이 필요하므로 부감독관의 수를 계산한다.
- math.ceil(remaining / C)를 사용하여 올림 처리한다.
- 최종 결과 출력
- 모든 시험장에 대한 감독관 수를 합산하여 출력한다.
도움이 되셨다면 공감 및 댓글 부탁드립니다.
728x90
'Python > 백준' 카테고리의 다른 글
백준 테트로미노 [14500] Python 코드 + 해설 (0) | 2024.10.22 |
---|---|
백준 주사위 굴리기 [14499] Python 코드 + 해설 (0) | 2024.10.22 |
백준 뱀 [3190] Python 코드 + 해설 (0) | 2024.10.22 |
백준 2048 (Easy) [12100] Python 코드 + 해설 (0) | 2024.10.22 |
백준 구슬 탈출 2 [13460] Python 코드 + 해설 (1) | 2024.10.21 |