Algorithm/기타

[백준 13458번] 시험 감독

agility 2019. 11. 26. 21:21

[java] 백준알고리즘 13458번 시험 감독

 

문제 자체에 예제도 많이 있기 때문에, 틀림이 없을 것으로 예상하였으나 실패가 나왔었다.

데이터의 최대 범위라는 함정만 피한다면 쉽게 통과할만한 문제라고 생각된다!

그러나 나는 함정에 빠져버렸지ㅜ

 

풀이 과정



1. 총 감독관은 시험장 당 1명씩이므로, 시험장의 갯수만큼 넣어준다!
2. 각 시험장의 남은 인원들을 부 감독관의 감시 가능 수 C 만큼 나눠주고, 이를 더해준다.
3. 1의 값과 2의 값을 더한다.

 

 

 

<< 백준알고리즘 13458번 반례 >>

1. 인원 수 계산을 위해서  부 감독관의 감시 가능 인원만큼을 계속 빼주면 안된다.(시간 초과)
2. 나눗셈을 할 때, 나누어 떨어지느냐, 떨어지지 않느냐를 고려해주어야 한다.
3. 시험장의 최대갯수는 100만, 각 시험장별 응시자 수도 최대 100만. 필요한 최대 감독관 수는
   100만*100만일 것. int로 총 합을 담으면 안된다!

 

 

 

 

소스 ▽

더보기
import java.util.Scanner;

public class Main {// 13458번, 시험 감독

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int N = sc.nextInt();// 시험장의 갯수 N
		int [] arr = new int[N];
		
		for (int i = 0; i < arr.length; i++) {
			arr[i]=sc.nextInt();
		}

		int B = sc.nextInt();// 총 감독관의 감시 가능 수
		int C = sc.nextInt();// 부 감독관의 감시 가능 수
		
		long total=N; //필요한 감독관의 수 : 먼저 총 감독관은 1명씩 들어가야하므로 미리 넣어준다.
		
		//총 감독관이 스스로 감시 가능한 인원을 제외해준다
		for (int i = 0; i < arr.length; i++) {
			arr[i]-=B;
		}
		
		for (int i = 0; i < arr.length; i++) {
			if (arr[i]>0) {
				total+=Math.ceil((double)arr[i]/C);
			}
		}
		System.out.println(total);
	}
}

 

 

 

Summary


1. int값의 범위 : -21억 4748만 3648 ~ 21억 4748만 3647 (long은 조를 넘어선 경 단위의 범위)
2. Math.ceil() : 숫자 올림 // Math.floor() : 숫자 내림 // Math.round() : 숫자 반올림

 

 

 

 

#java #백준 #백준알고리즘 #13458번 #시험감독