SW 역량 테스트

백준_13458_시험감독

o늘do 2020. 3. 4. 10:47

                                         출처: https://www.acmicpc.net/problem/13458 

 

13458번: 시험 감독

첫째 줄에 시험장의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 각 시험장에 있는 응시자의 수 Ai (1 ≤ Ai ≤ 1,000,000)가 주어진다. 셋째 줄에는 B와 C가 주어진다. (1 ≤ B, C ≤ 1,000,000)

www.acmicpc.net

문제를 읽어 보면 그리디 문제라는 것을 알 수 있다.!!

N 개의 시험장과 각 시험장에 응시하는 인원이 주어진다.

그다음에는 총감독관과 부감독관이 감시할 수 있는 인원이 주어진다

 

문제 조건에서 각 방마다 총감독관은 1명이 있어야 하고 부감독관은 여러 명 있어도 된다!

 

!! 주의할 점은 총 감독할 수 있는 인원의 최솟값이 너무 커질 수가 있기 때문에 결괏값을 int 형이 아닌 long 형으로 설정해야 한다

 

//long!!!
long sum = 0;
		

 

나는 각 방의 인원을 num이라는 배열에 담아주었다. 그리고 각방에서 필요한 감독관의 최소인원을 더해나가는 식으로 풀었다  각방에서 총감독관의 인원은 적어도 1 명이 필요하므로 필요한 감독관의 최소인원을 1 늘려준다 그 후 

만약 i 번째 방의 응시생( num [i] )에서 총감독관이 감시 가능 한인원(num _ main)을 빼준값이 0 보다 크다면 

나머지 인원들은 부감독관이 감시하도록 하면 된다.

 

sum ++;
					
if(num[i] - num_main > 0) {
	sum +=Math.ceil(1.0 * (num[i] - num_main)/ num_sub);
}

 

자바는 int 형끼리 나눗셈 계산 시 나머지를 내림해서 정수형으로 반환한다!!! 그렇기 때문에 나는

Math.ceil()을 이용해 올림을 해주었고 int 형을 double 형으로 형 변환해주기 위해여 1.0을 곱해주었다.!

예를 들어 : 감시 가능한 인원 총감독관 : 3, 부감독관 : 3

4번 방의 인원이 10명이었는데 총감독관이 감시 가능한 인원이 3명이라 나머지 7명을 부감독관이 

감시해야 한다면 7 / 3 = 2.3333.... 이기 때문에 총 3명이 필요하다.

 

 

다음은 전체 코드이다.


public class Baekjoon_13458 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		
		int[] num = new int[n];
		
		
		for(int i = 0; i < n; i++) {
			num[i] = sc.nextInt();
			
		}
		
		int num_main = sc.nextInt();
		int num_sub = sc.nextInt();
		//long!!!
		long sum = 0;
		
		for(int i = 0; i < n; i++) {
			sum ++;
					
			if(num[i] - num_main > 0) {
			  sum +=Math.ceil(1.0 * (num[i] - num_main)/ num_sub);
			}
			
		}
		
		System.out.println(sum);
		
	}

}

  

 

 

sw 기출치고는 쉬운 문제였지만 아마도 int 형으로 최소인원값을 설정하고 체출을 계속해서 정답 비율이 많이 낮았던거 같다.

 

'SW 역량 테스트' 카테고리의 다른 글

백준_17142_연구소3  (0) 2020.05.10
백준_15683_감시  (0) 2020.03.07
백준_14501_퇴사  (0) 2020.03.04
백준_14899_스타트와링크  (0) 2020.03.04