[백준 13458 - JAVA] 시험감독

삼성 기출문제집 리스트에 있는 시험감독 문제를 풀어 보았다.

 

https://www.acmicpc.net/problem/13458

 

13458번: 시험 감독

첫째 줄에 시험장의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 각 시험장에 있는 응시자의 수 Ai (1 ≤ Ai ≤ 1,000,000)가 주어진다. 셋째 줄에는 B와 C가 주어진다. (1 ≤ B, C ≤ 1,000,000)

www.acmicpc.net

 

정답률이 25%대로 낮은 편인데, 막상 풀어보면 그렇게 난이도가 높은 문제는 아니다.

 

각각의 시험장에 총감독관은 오직 1명만 있어야 하고, 부감독관은 여러 명 있어도 된다.

-> 일단 시험장에는 총 감독관은 무조건 1명 있어야 함

 

그러면 총 감독관이 관리할 수 있는 인원보다 큰 방이 아닌 경우는 총 감독관만 있으면 되고,

그렇지 않은 경우는 그 방의 인원 - 총감독관이 관리할 수 있는 인원을 우선 빼주고 부 감독관이 몇 명 들어갈 지를 정하면 된다.

 

코드는 다음과 같이 Java로 구현하였다.

 

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
/**
*
* @author kora1492
*/
public class BOJ_13458 {
static int N;
static int examRoom[];
static int b, c;
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
examRoom = new int [N+1];
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for(int i=1;i<=N;i++){
examRoom[i] = Integer.parseInt(st.nextToken());
}
st = new StringTokenizer(br.readLine(), " ");
b = Integer.parseInt(st.nextToken());
c = Integer.parseInt(st.nextToken());
long sum= 0;
for(int i=1;i<=N;i++){
if(examRoom[i] - b <=0){
sum++; // 총감독관 한명으로 감독 가능
} else {
examRoom[i] -= b; // 총 감독관이 들어가고 감독해야 할 인원
// 나누어 떨어지는 경우
if(examRoom[i] % c == 0){
sum += 1 + examRoom[i] / c;
} else {
// 나누어 떨어지지 않기 때문에 부 감독관이 한명 더 들어가야 함.
sum += 2 + examRoom[i] / c;
}
}
}
System.out.println(sum);
}
}
view raw BOJ_13458.java hosted with ❤ by GitHub