반응형
시험 응시자 수에 따른 감독관의 수를 구하는 문제이다.
먼저 변수부터 선언해보자.
시험장은 n, 시험장 별 학생 수는 n만큼의 크기를 가진 a의 배열에 각 시험장의 학생 수를 넣는다.
총 감독관이 감시할 수 있는 응시자의 수는 b, 부 감독관이 감시할 수 있는 수는 c에 넣는다
총 감독관의 수는 num이라고 하자.
이때 num은 int형이 아닌 long형으로 한다.
int n = sc.nextInt();
int[] a = new int[n];
for (int i = 0; i < a.length; i++) {
a[i] = sc.nextInt();
}
int b = sc.nextInt();
int c = sc.nextInt();
long num = 0;
위 조건에서 범위가 무려 1,000,000 까지 이므로 감독관의 수는 충분히 큰 수를 담을 수 있도록 long형으로 했다.
이제 각 시험장에 감독관이 몇명이 필요한지 확인한 후 차례대로 num에 더해주면 된다.
for문을 활용하여 각 시험장을 체크한다.
먼저 num을 1씩 증가시킨다. 응시자의 수 범위는 1부터 이므로 총 감독관은 꼭 한명씩 필요하기 때문이다.
이후 if문을 활용해 응시자의 수가 총 감독관이 감시할 수 있는 수보다 작으면 continue를 이용해 빠져나오고 아니라면
a[i] (학생 수) - b (총 감독관이 감시할 수 있는 수) / c (부 감독관이 감시할 수 있는 수)
로 부 감독관의 수를 구할 수 있다.
이 부 감독관의 수를 num에 더해준다.
for (int i = 0; i < a.length; i++) {
num++;
if (a[i] <= b)
continue;
if ((a[i] - b) % c > 0) {
num += ((a[i] - b) / c) + 1;
} else
num += (a[i] - b) / c;
}
다만 이때 주의할 점은 c로 나눌때 나머지가 0이라면 상관없으나 나머지가 생긴다면 사람이 모자라다는 뜻이므로 부 감독관의 수를 하나 더해준다.
전체 코드를 보면 다음과 같다.
import java.util.Scanner;
public class Back13458 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] a = new int[n];
for (int i = 0; i < a.length; i++) {
a[i] = sc.nextInt();
}
int b = sc.nextInt();
int c = sc.nextInt();
long num = 0;
for (int i = 0; i < a.length; i++) {
num++;
if (a[i] <= b)
continue;
if ((a[i] - b) % c > 0) {
num += ((a[i] - b) / c) + 1;
} else
num += (a[i] - b) / c;
}
System.out.println(num);
sc.close();
}
}
반응형
'Java > 백준알고리즘' 카테고리의 다른 글
[Java] 백준알고리즘 #1094 막대기 (0) | 2021.04.27 |
---|---|
[Java] 백준알고리즘 #1676 팩토리얼 0의 개수 (0) | 2021.04.22 |
[Java] 백준알고리즘 #3046 R2 (0) | 2021.04.15 |
[Java] 백준알고리즘 #1476 날짜 계산 (0) | 2021.04.15 |
[Java] 백준알고리즘 #2455 지능형 기차 (0) | 2021.04.13 |