13458.시험감독
Updated:
Intro
- 오늘은 Bronze 2 레벨 13458번 시험감독 문제를 풀어보았습니다.
시험감독
문제 설명
- N개의 시험장이 있고, 각 시험장마다 응시장이 있다.
- i번 시험장에 있는 응시자 수는 Ai 명이다.
- 감독관은 총감독관과 부감독관으로 나뉘어져 있으며, 총감독관이 한 시험장에서 감시할 수 있는 응시자의 수는 B명, 부감독관이 한 시험장에서 감시할 수 있는 응시자의 수는 C명이다.
- 각각의 시험장에는 총감독관이 오직 1명만 있고, 부감독관은 여러명이 있어도 된다.
- 각 시험자마다 응시생들을 모두 관리해야 할 때, 필요한 감독관 수의 최솟값을 구하는 프로그램을 작성하시오.
입력
- 첫째 줄: 시험장의 개수 N
- 둘째 줄: 각 시험장에 있는 응시자 수 Ai가 주어진다.
- 셋째 줄: B와 C가 주어진다.
문제 접근 방식
시간초과 되는 풀이 방식
- 시험장에 있는 응시자 수를 for loop으로 돌아가면서 먼저 총감독관이 오직 1명만 있을 수 있으므로 B만큼 뺀다.
- 그 이후, 남은 응시자 수를 부감독관이 관리할 수 있는 숫자 C로 나누어 몇 명이 필요한지 확인한다.
정답인 풀이 방식
- 우선, 총감독관은 무조건 1명이 있어야 하므로 1을 추가한다.
- 그리고 응시자 수에서 총감독관이 관리할 수 있는 B명을 빼고,
- 남은 응시자를 부감독관이 관리할 수 있는 숫자 C로 나누어 올림 처리를 해버리면 몇 명이 필요한지 확인할 수 있다.
- python에서 올림을 하기 위해서는?
import math
&math.round(숫자)
를 이용하면 된다.
- python에서 올림을 하기 위해서는?
문제 답안
시간초과가 나오는 코드
-
N = int(input()) students = list(map(int, input().split())) B, C = map(int, input().split()) ans = 0 for i in students: if i - B <= 0: ans += 1 continue else: remain = i - B ans += 1 while True: if remain - C <= 0: ans += 1 break else: remain -= C ans += 1 print(ans)
실제 답안
-
import math N = int(input()) students = list(map(int, input().split())) B, C = map(int, input().split()) ans = 0 for i in students: ans += 1 remain = i - B if i - B > 0: ans += math.ceil(remain/C) print(ans)
Leave a comment