[백준] 13458 : 시험감독 파이썬

FFTL:)·2021년 8월 23일

문제 - https://www.acmicpc.net/problem/13458

크게 어렵다고 생각이 되지 않는 문제였습니다. 그러나 모든 예제를 맞춤에도 정답처리가 되지 않아서 고생을 조금 하였고, 질문 글을 올려 문제점을 발견하여 해결하였습니다.

풀이

  • 일단 총감독관은 한 시험장당 한명씩 꼭 필요하기 때문에 시험장 개수만큼 answer에 추가해 주고 시작하였습니다.
  • 시험장 별로 이제 총감독관이 감시할 수 있는 응시자수를 제외한 뒤 판단을 시작합니다.
    1. 총감독관만으로 응시자 모두를 감시할 수 있다면 continue로 건너뜁니다.
    2. 총감독관만으로는 부족할 경우 이제 부감독관을 추가하기 시작합니다.
    -> (남은 응시자 수%부감독관이 감시할 수 있는 수) 를 하여 1차적으로 수가 정확하게 나누어 떨어지는지 확인합니다.
    -> 나머지가 존재할 경우 (남은 응시자 수//부감독관이 감시할 수 있는 수) +1 을 해주고
    -> 나누어 떨어질 경우 (남은 응시자 수//부감독관이 감시할 수 있는 수)를 answer에 추가해줍니다.

위의 과정으로 풀이가 끝이나게 됩니다. 제가 틀렸던 부분은 부감독관을 추가하는 부분이었는데, 처음에는 모든 경우를 answer += (a-main)//sub+1 으로 처리를 했었습니다. 이렇게 할 경우 왠만한 경우에는 잘 작동이 되었지만 (a-main)//sub가 나누어 떨어지는 경우 +1이 필요없는 과정이 되는 것 이었습니다.

code

n = int(input());
arr = list(map(int, input().split()));
main, sub = map(int, input().split());

answer = n; #총감독관은 무조건 들어가야 하므로 한명씩 넣어줍니다.

for a in arr:
    if a-main <= 0: #총감독관 하나로 충분하다면
        continue;
    else: #부감독관을 추가해 줍니다.
        if a-main<=sub:	#부감독관 한명으로 해결이 되는 경우
            answer += 1;
        else:	#부감독관이 여러명이 필요할 경우
            mod = (a-main)%sub;
            div = (a-main)//sub;
            if mod == 0:
                answer += div;
            else:
                answer += div+1;

print(answer);
profile
생각하는 개발자가 되자!

0개의 댓글