Java/백준알고리즘

[Java] 백준알고리즘 #13458 시험 감독

Sehyeok20 2021. 4. 15. 19:22
반응형

백준알고리즘 #13458 시험 감독 문제

시험 응시자 수에 따른 감독관의 수를 구하는 문제이다.

 

먼저 변수부터 선언해보자.

시험장은 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();
	}

}
반응형