본문 바로가기
백준

[백준] 13458번 : 시험 감독 – JAVA [자바]

by Hongwoo 2022. 4. 22.
반응형

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

 


  • 문제

 

 


  • 문제 풀이

백준 13458번 시험 감독은 브론즈 2 난이도의 수학 문제이다. 이 문제에서는 n개의 시험장이 있고 각 i번 시험장에는 Ai명만큼의 응시자가 있다. 그리고 감독관으로는 총감독관과 부감독관이 있고 총감독관은 한 시험장에서 B명을 감시할 수 있고 부감독관은 한 시험장에서 C명을 감독할 수 있다. 그리고 각 시험장에 있는 모든 응시자들을 감시해야 할 때, 필요한 감독관의 최솟값을 구하면 되는 문제이다. 

 

우선 이 문제에 써져있지는 않지만 각 시험장에 총감독관은 무조건 있어야 한다. 이것은 문제에서 주어진 예제 4번을 보면 알 수 있다. 

 

필요한 감독관의 최솟값 수를 count라고 하겠다. 일단 각 시험장에는 무조건 총감독관이 있어야 하니까 count는 시험장 개수인 n부터 시작한다. 그리고 각 시험장에 있는 총감독관이 B명씩 감시할 수 있으니 각 시험장의 응시자 수에서 B씩 빼준다.

long count = n;
for (int i = 0; i < n; i++) {
    A[i] -= b;
}

 

count는 무조건 int형 대신 long형으로 해야 한다. 왜냐하면 count를 int형으로 했을 때 int의 범위를 초과한다. 출력 값이 최대로 될 때는 B와 C가 모두 1이고, N이 1,000,000이며 모든 A의 값들이 1,000,000일 때이다. 이 경우, 답이 1,000,000,000,000으로 int 범위를 훨씬 넘는다.

 

각 시험장의 응시자 수에서 총감독관이 감시할 수 있는 B명씩 뺐다. 이제 부감독관만 추가될 수 있으므로 남아있는 응시자 수에서 C를 나눠준다. 소수점이 나오면 무조건 올림을 해준다. 이 값들을 count에 더하면 이게 답이 된다.

 


  • 코드

 

import java.io.*;
import java.math.BigInteger;
import java.util.*;
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        StringTokenizer st = new StringTokenizer(br.readLine());
        int[] A = new int[n];
        for (int i = 0; i < n; i++) {
            A[i] = Integer.parseInt(st.nextToken());
        }
        st = new StringTokenizer(br.readLine());
        int b = Integer.parseInt(st.nextToken());
        int c = Integer.parseInt(st.nextToken());
        long count = n;
        for (int i = 0; i < n; i++) {
            A[i] -= b;
        }
        count += n;
        for (int i = 0; i < n; i++) {
            if (A[i] <= 0) continue;
            long num = (long)Math.ceil((double)A[i]/(double)c);
            count += num;
        }
        System.out.print(count);
    }
}

  • 후기

이 문제는 int형 대신 long형을 써야지 풀리는 문제이다. 나도 처음엔 모르고 int형을 썼다가 틀렸었다.

 

반응형

댓글