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(숫자)를 이용하면 된다.


문제 답안
시간초과가 나오는 코드
  • 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