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)
삼성 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));
}
}