Development Logs/Algorithms

[JAVA] 백준 13458번 : 시험 감독 (삼성 SW 역량 테스트 기출 문제)

유뱅유뱅뱅 2020. 8. 6. 22:17

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

문제

 

해결 방안

문제를 이해하고 단순히 구현하는 문제이다.
1. 총 감독은 시험장마다 1명씩 있어서 시험자 응시자 수 배열 a[]에서 b(총감독이 맡을 수 있는 응시자 수)만큼 다 빼주고 cnt++해주고 시작하였다.

2. b만큼 빼준 a[i] 값이 0보다 작거나 같으면 부감독이 필요없으므로 continue 해줬다.

3. 그렇지 않는 경우 a[i]를 c(부감독이 맡을 수 있는 응시자 수)로 나눠주고 몫을 cnt에 더해줬다.

4. a[i]를 c로 나누었을 때 나머지 값이 0보다 큰 경우 부 감독이 한명 더 필요하므로 cnt++를 해줫다.

 

코드

import java.util.Scanner;

// 시험 감독
public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner input = new Scanner(System.in);
		int n = input.nextInt();
		long cnt = 0; // 감독관 수
		int[] a = new int[n]; // 응시자 수
		
		for(int i=0; i<n; i++) {
			a[i] = input.nextInt();
		}
		
		int b = input.nextInt(); // 총감독이 맡을 수 있는 사람수
		int c = input.nextInt(); // 부감독이 맡을 수 있는 사람수
		
		for(int i=0; i<n; i++) {
			a[i]-=b;
			cnt++;
			
			// 총 감독이 맡을 수 있는 경우는 부감독 필요 없으므로 넘어감
			if(a[i]<=0) {
				continue;
			}
			// 부감독이 추가로 필요한 경우
			else {
				cnt += a[i]/c;
				// 나머지가 0보다 크면 부감독 한명 더 추가
				if(a[i]%c > 0) {
					cnt++;
				}
			}
		}
		
		System.out.println(cnt);
	}

}