ALGORITHM

[JAVA] 백준 13458- 시험 감독

연듀 2022. 11. 25. 10:39

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

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

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());

        int[] arr = new int[n];
        StringTokenizer st;

        st = new StringTokenizer(br.readLine());

        for (int i = 0; i < n; i++) {
            arr[i] = Integer.parseInt(st.nextToken());
        }

        st = new StringTokenizer(br.readLine());
        int b = Integer.parseInt(st.nextToken()); // 총감독관이 한 시험장에서 감시할 수 있는 응시자 수
        int c = Integer.parseInt(st.nextToken()); // 부감독관이 한 시험장에서 감시할 수 있는 응시자 수

        long cnt = 0;

        for (int i = 0; i < n; i++) {
            if (arr[i] <= b) { // 한 시험장의 응시자수가 b보다 작으면
                cnt++; // 총감독관 1명만 증가
                continue;
            }

            arr[i] -= b; // 총감독관 한명이 감시할 수 있는 응시자수만큼 감소
            cnt++; // 총감독관 1명 증가

            // 필요한 부감독관 수 계산
            if (arr[i] % c == 0) cnt += arr[i] / c;
            else cnt += (arr[i] / c) + 1;
        }
        System.out.println(cnt);
    }
}

 

 

예제 케이스에는 없었지만 한 시험장의 응시자 수가  b보다 작을 때를 고려해야 한다. 이 점을 놓쳐서 처음에 틀렸다.

그리고 주의해야할 점은 시험장의 수가 최대 1,000,000 이고 각 시험장의 응시자수가 최대 1,000,000이므로

최대 백만 x 백만 정도의 감독관의 수가 나올 수 있고  int형 범위인 20억을 넘어가 버린다.

따라서 결괏값을 long형으로 해줘야 한다.