728x90
반응형
문제
총 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)
출력
각 시험장마다 응시생을 모두 감독하기 위해 필요한 감독관의 최소 수를 출력한다.
※ 문제풀이 도출과정
(1) 일단 주감독관 담당 가능 인원만큼 클래스 인원에서 뺀다.
(2) 부감독관 감당 가능 인원만큼 클래스 인원을 나눌 때, 나누어 떨어지면 몫만큼 필요한 감독관 수를 증가시킨다
(3) 나누어 떨어지지 않으면 +1을 더 증가시킨다.
package math;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class TestDirector {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[] arr = new int[N];
int[] dir = new int[2];
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for (int i = 0; i < N; i++) arr[i] = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
dir[0] = Integer.parseInt(st.nextToken());
dir[1] = Integer.parseInt(st.nextToken());
long cnt = 0;
for (int i = 0; i < arr.length; i++) {
int examer = arr[i] - dir[0];
cnt++;
if(examer <= 0) continue;
if(examer % dir[1] == 0) cnt += examer/dir[1];
else cnt += examer/dir[1] + 1;
}
System.out.println(cnt);
}
}
728x90
반응형
'코딩테스트 > 백준' 카테고리의 다른 글
[백준/java] 5086번: 배수와 약수 (0) | 2021.06.23 |
---|---|
[백준/java] 6603번: 로또 - 백트래킹 (0) | 2021.06.14 |
[백준/java] 1463번: 1로 만들기 (0) | 2021.06.11 |
[백준/java] 9095번: 1, 2, 3 더하기 - DP (0) | 2021.06.11 |
[백준/java] 9625번:BABBA - DP(Dynamic Programming) (0) | 2021.06.10 |
댓글