삼성 SW 역량 테스트 기출 문제

백준 13458: 시험 감독(C언어)

염지미 2023. 2. 2. 18:58
 

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개의 시험장이 있고, 각각의 시험장마다 응시자들이 있다. i번 시험장에 있는 응시자의 수는 Ai명이다.

감독관은 총감독관과 부감독관으로 두 종류가 있다. 총감독관은 한 시험장에서 감시할 수 있는 응시자의 수가 B명이고,

부감독관은 한 시험장에서 감시할 수 있는 응시자의 수가 C명이다.

각각의 시험장에 총감독관은 오직 1명만 있어야 하고, 부감독관은 여러 명 있어도 된다.

각 시험장마다 응시생들을 모두 감시해야 한다. 이때, 필요한 감독관 수의 최솟값을 구하는 프로그램을 작성하시오.

예제

첫째 줄에 시험장의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다.

둘째 줄에는 각 시험장에 있는 응시자의 수 Ai (1 ≤ Ai ≤ 1,000,000)가 주어진다.

셋째 줄에는 B와 C가 주어진다. (1 ≤ B, C ≤ 1,000,000)

출력

각 시험장마다 응시생을 모두 감독하기 위해 필요한 감독관의 최소 수를 출력한다.

문제풀이

위의 내용을 정리해보면

1. N(1 ≤ N ≤ 1,000,000)을 입력받는다.

2. Ai (1 ≤ Ai ≤ 1,000,000)을 입력받는다.

3. B와 C(1 ≤ B, C ≤ 1,000,000)를 입력받는다.

4. 총감독은 무조건 1명이고, 부감독관은 제한이 없다.

 

문제 자체는 해결하기 쉽다. 응시자 수 A를 배열에 각각 입력 -> A에 B를 빼고 최종 값에 1증가 ->

남은 A를 C로 나누고 나머지가 0이면 최종 값에 C를 더해주고, 나머지가 0이 아니면 최종 값에

C를 더해주고 1을 추가로 더해주면 끝난다. 하지만 N가 100만, A가 100만, B와 C가 1이라고 가정하면

필요한 감독관의 최솟값은 1,000,000 x 1,000,000 = 1조가 나온다. int형의 범위는 최대 2,147,438,647이기

때문에 long long 타입에 최종 값을 저장하여 출력해줘야 한다.

최종코드

#include<stdio.h>

int n, b, c;
long long answer;
int arr[1000000];

void check() {
	for (int i = 0; i < n; i++) {
		arr[i] -= b;
		answer++;
		if (arr[i] > 0) {
			if (arr[i] % c == 0) answer += arr[i] / c;
			else answer += arr[i] / c + 1;
		}
	}
	return;
}

int main() {
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		scanf("%d", &arr[i]);
	}
	scanf("%d %d", &b, &c);
	check();
	printf("%lld", answer);
	return 0;
}