백준 13458번: 시험 감독

kgh128·2023년 1월 18일

코드: https://github.com/kgh128/Problem-Solving/blob/main/src/Baekjoon/p13458.java


1. 총감독관

각 시험장에 총감독관은 반드시 1명이 있어야 하므로 총 N개의 시험장이 있으면 N명의 총감독관이 필요하다. 따라서 필요한 감독관의 수(minSupervisors)에 N을 더한다.

1명의 총감독관은 B명의 응시자를 감시할 수 있다.
총감독관이 시험장의 모든 응시자를 감시할 수 있으면 부감독관은 필요하지 않다.

  • (각 시험장의 응시자 수) <= B이면 부감독관은 필요 X
  • (각 시험장의 응시자 수) > B이면 부감독관이 필요 O

부감독관이 필요하지 않은 경우를 고려하지 않아 계속 틀렸다. 이를 고려하지 않으면 minSupervisors가 음수가 나오는 반례가 존재한다.


2. 부감독관

총감독관이 감시해도 응시자가 남은 경우에 필요한 부감독관의 수를 구한다.

  • (각 시험장의 남은 응시자 수) = (각 시험장의 응시자 수) - B

한 명의 부감독관은 C명을 감시할 수 있으므로 일단 필요한 부감독관의 수는 (각 시험장의 남은 응시자 수) / C이다. 이를 minSupervisors에 더한다.

  • (각 시험장의 남은 응시자 수) % C == 0이면 더 남은 응시자가 없으므로 부감독관이 더 필요하지 않다.
  • (각 시험장의 남은 응시자 수) % C != 0이면 감시해야할 응시자가 아직 더 남았으므로 1명의 부감독관이 더 필요하다.
    따라서 minSupervisors에 1을 더한다.

위의 과정을 각 시험장마다 반복하여 최종적으로 minSupervisors를 구하고 출력한다.


3. minSupervisors 자료형

minSupervisors가 최대가 나오는 경우를 생각해보자.

  • 시험장의 개수가 1,000,000개
  • 모든 시험장의 응시자 수가 각각 1,000,000명
  • 총감독관과 부감독관이 감시할 수 있는 응시자 수가 각각 1명

이 경우에 각 시험장마다 필요한 최소 감독관의 수가 1,000,000명이므로 minSupervisors는 1,000,000,000,000이다.
이는 int형의 최댓값인 2,147,483,647을 벗어난다.

따라서 minSupervisors는 int형이 아니라 long형으로 선언해야 문제를 풀 수 있다.

minSupervisors를 int형으로 선언하고 풀어서 계속 틀렸다. 다음부터는 정수 자료형의 범위도 고려하면서 풀어야겠다.

0개의 댓글