[백준] 시험 감독

이정연·2023년 4월 9일
0

CodingTest

목록 보기
141/165
post-thumbnail

👨🏻‍💻 시험 감독

설계

while문 사용 (시간초과)

import sys
input = sys.stdin.readline

if __name__ == '__main__':
    answer = 0
    N = int(input())
    a_lst = list(map(int,input().split()))
    B,C = map(int,input().split())

    for a in a_lst:
        b_flag = True
        cnt = 0
        while a > 0:
            if b_flag:
                a -= B
                b_flag = False
                cnt += 1
            else:
                a -= C
                cnt += 1
        answer += cnt
    print(answer)

총감독관은 반드시 1명 있어야 한다.

따라서, 응시생에서 B를 빼주고 감독관 수 증가

그리고 나머지 인원에 대하여 부감독관 처리를 해주었다.

그런데 이렇게 하면 시간 초과가 발생한다.

for과 while의 혼용으로 이중 반복문이기 때문이다.

따라서 코드를 다음과 같이 수정했다.

"올림" 사용 (정답)

import sys
import math
input = sys.stdin.readline

if __name__ == '__main__':
    N = int(input())
    a_lst = list(map(int,input().split()))
    B,C = map(int,input().split())
    answer = N

    for a in a_lst:
        if a-B > 0:
            answer += math.ceil((a-B)/C)
    print(answer)

위에서 언급한 바와 같이 총감독관은 반드시 1명 들어가야하므로

B를 미리 빼주었다.

그리고 남은 인원에 대하여 C를 나눈 값을 올림한 것이 곧 필요한 부감독관의 수가 된다.

예시

5
10 9 10 9 10
7 2

각 방마다 총감독관이 투입하여 감시할 수 있는 인원을 제한다.

a_lst = [3,2,3,2,3]
answer = 5

이제 부감독관이 몇 명 투입해야하는지를 구한다.

0번 방: 3/2 = 1.5 --> 올림 --> 2
1번 방: 2/2 = 1.0 --> 올림 --> 1
2번 방: 3/2 = 1.5 --> 올림 --> 2
.
.
.

그렇게 해서 최종적으로 2+1+2+1+2 = 8명이 필요하다.

따라서 answer = 5+8 = 13

profile
0x68656C6C6F21

0개의 댓글