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


  • 풀이 방법[알고리즘]

단순 수학 계산 문제인데 처음에 생각없이 타입설정을 해서 틀렸다.  반의 수만큼 총 감독관을 빼고, 남은 인원을 부 감독관으로 나눈다. 이후 올림해줘서 최소 인원을 충족시켰다. 응시생 수가 최대 100만이어서 처음 answer타입을 int로 설정했을 때, 돌리자마자 틀렸습니다가 나왔다.


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = null;

		int N = Integer.parseInt(br.readLine());
		st = new StringTokenizer(br.readLine());
		int[] A = new int[N];
		for (int i = 0; i < A.length; i++) {
			A[i] = Integer.parseInt(st.nextToken());
		}

		st = new StringTokenizer(br.readLine());
		int[] BC = new int[N];
		// 총감독관이 보는 학생
		int B = Integer.parseInt(st.nextToken());
		// 부감독관이 보는 학생
		int C = Integer.parseInt(st.nextToken());

		// 각 시험장마다 필요한 부감독관의 수
		long[] help = new long[N];

		for (int i = 0; i < A.length; i++) {
			if (A[i] < B) {
				continue;
			} else {
				help[i] = (long) Math.ceil((double)(A[i] - B) / C);
			} // if
		} // FOR


		long answer =N;
		for (int i = 0; i < help.length; i++) {
			answer+=help[i];	
		}
		System.out.println(answer);
	}
}

+ Recent posts