[13458] 시험 감독

HeeSeong·2021년 8월 25일
0

백준

목록 보기
40/79
post-thumbnail

🔗 문제 링크

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


🔍 문제 설명


총 N개의 시험장이 있고, 각각의 시험장마다 응시자들이 있다. i번 시험장에 있는 응시자의 수는 Ai명이다.

감독관은 총감독관과 부감독관으로 두 종류가 있다. 총감독관은 한 시험장에서 감시할 수 있는 응시자의 수가 B명이고, 부감독관은 한 시험장에서 감시할 수 있는 응시자의 수가 C명이다.

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

각 시험장마다 응시생들을 모두 감시해야 한다. 이때, 필요한 감독관 수의 최솟값을 구하는 프로그램을 작성하시오


⚠️ 제한사항


  • 첫째 줄에 시험장의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다.

  • 둘째 줄에는 각 시험장에 있는 응시자의 수 Ai (1 ≤ Ai ≤ 1,000,000)가 주어진다.

  • 셋째 줄에는 B와 C가 주어진다. (1 ≤ B, C ≤ 1,000,000)



🗝 풀이 (언어 : Java)


삼성 SW 역량 테스트 기출 문제중에 쉬워 보이는 문제였다. 근데 정답률이 26%인게 아이러니하다.
정수 범위가 int로 하면 분명 넘칠 것 같아서 long으로 선언해주었다. 주감독관은 무조건 1명이고 나머지를 보조감독관이 처리하는데 몫과 나머지로 한번에 계산해서 정답을 카운트했다.

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

public class Main {
    public static long countSupervisor(String[] studentNum, int main, int sub) {
        long answer = 0;
        for (String n : studentNum) {
            // 주 감독관 처리 후
            long afterMain = Integer.parseInt(n) - main;
            answer++;
            // 주 감독관 혼자 처리 가능
            if (afterMain <= 0)
                continue;
            // 부 감독관 처리
            answer += (afterMain / sub);
            answer += (afterMain % sub == 0) ? 0 : 1;
        }
        return answer;
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Integer.parseInt(br.readLine());
        String[] studentNum = br.readLine().split(" ");
        StringTokenizer st = new StringTokenizer(br.readLine());
        int main = Integer.parseInt(st.nextToken()), sub = Integer.parseInt(st.nextToken());
        System.out.print(countSupervisor(studentNum, main, sub));
    }
}
profile
끊임없이 성장하고 싶은 개발자

0개의 댓글