문제를 직접 풀어 보고 싶다면
아래 주소로 들어가셔서 하시면 됩니다
https://www.acmicpc.net/problem/13458
출처: 백준 온라인 저지 (https://www.acmicpc.net)
추가 예제 입력과 출력
// 예제 입력1
3
3 4 5
2 2
// 예제 출력1
7
// 예제 입력2
3
7 7 9
4 9
// 예제 출력2
6
// 예제 입력3
3
7 7 9
7 3
// 예제 출력3
4
예제 입 출력을 보면서 문제를 먼저 이해하는게 중요한 문제인것 같아요
우선 각 방마다 총감독관은 무조건 한 명이 있어야 되요. 덜도 말고 더도 말고 한명!!
나머지 인원은 부감독관이 관리합니다.
그렇기 때문에 응시생에서 총감독관이 감독할 수 있는 인원 수를 빼주고 => 응시생-총감독관(1)
나머지는 부감독관이 감독할 수 있는 인원수로 몫과 나머지를 구해서 구해주면 되요!
=>( 응시생-총감독관) / 부감독관이 관리할 수 있는 인원수 => 몫과 나머지 구하기
예를 들어 방에 응시생이 10명 이고 B값이 3, C값이 2라고 가정해봅시다
그러면 우선 10-3=7 을 통해 총감독관이 들어 갔어요
나머지 7명을 부 감독관이 관리해야하니까 7/3=2...1 이죠?
그러니까 부 감독관이 2명 들어가고도 1명을 더 커버해야되니까 총 3명이 필요해요
즉 나눠서 나머지가 있다면 1명을 더 더해줘서 계산해주면 됩니다
주의 할점!!!
저번에도 이런 문제에서 잘못한게 총 감독관의 수가 int형을 넘어 간다는 겁니다. 즉 21억으로 못 담음....
그걸 모르고 계속 제출하자마자 틀렸다고 그러더라구요 ㅠㅠㅠ
감독 인원수를 담을 변수는 long Type으로 선언해줍시다!!
백준 온라인 저지(BOJ) 13458번: 시험 감독 자바(java) 풀이
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int numberOfRoom = scan.nextInt(); // 시험장의 개수
int[] numberOfPersons = new int[numberOfRoom]; // 각 시험장의 응시자 수
int main_enableSupervise, sub_enableSupervise; // 총 감독과, 부 감독관의 감시할 수 있는 응시자 수
long mainSupervisor = 0, subSupervisor = 0;
for(int i=0; i<numberOfRoom; i++) {
numberOfPersons[i] = scan.nextInt();
}
main_enableSupervise = scan.nextInt();
sub_enableSupervise = scan.nextInt();
for(int i=0; i<numberOfRoom; i++) {
numberOfPersons[i] -= main_enableSupervise;
mainSupervisor++;
if(numberOfPersons[i] > 0){
if(numberOfPersons[i] <= sub_enableSupervise){
subSupervisor++;
}
else{
subSupervisor += numberOfPersons[i] / sub_enableSupervise;
if( numberOfPersons[i] % sub_enableSupervise != 0)
subSupervisor++;
}
}
}
System.out.println(mainSupervisor + subSupervisor);
}
}
2019/10/09 - [알고리즘/백준 알고리즘] - [백준 알고리즘, 백트레킹, 브루트 포스] 삼성 SW 역량 테스트 문제 :: 14502번 연구소
2019/10/11 - [알고리즘/백준 알고리즘] - [백준 알고리즘, 브루트 포스] 삼성 SW 역량 테스트 문제 :: 13458번 시험감독
2019/10/11 - [알고리즘/백준 알고리즘] - [백준 알고리즘, 브루트 포스] 삼성 SW 역량 테스트 문제 :: 14889번 스타트와 링크
2019/10/13 - [알고리즘/백준 알고리즘] - [백준 알고리즘, 브루트 포스, 순열] 삼성 SW 역량 테스트 문제 :: 14888번 연산자 끼워넣기