본문 바로가기

알고리즘 · 코딩

[백준 13458번] 시험 감독

삼성 SW 역량 테스트 / 삼성 코딩테스트

 

문제 링크

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


C++ 풀이

#include <iostream>
#include <vector>
#include <math.h>
using namespace std;

int main() {
	int N, B, C;
	cin >> N;
	vector <int> tester(N);
	for (int i = 0; i < N; i++)
		cin >> tester[i];
	cin >> B >> C; //총감독관, 부감독관

	long long answer = 0;
	for (int i = 0; i < N; i++) {
		answer++;
		int leftN = tester[i] - B;
		if (leftN > 0)
			answer += ceil((double)leftN / C);
	}

	cout << answer;
	return 0;
}

 

 

주의해야할 점

1. 시험장 응시자 수보다 총감독관 감시 가능한 수가 더 큰 경우

  : 단순하게 ( (응시자 수 - 총감독관 감시 가능 수) / 부감독관 감시 가능 수 )로 계산한다면 마이너스 값을 나누는 경우가 발생할 수 있다.

 

2. 변수 타입 범위

  : 시험장의 개수가 최대 1,000,000이고, 각 시험장의 응시자 수가 최대 1,000,000이기 때문에 감독관이 감시할 수 있는 응시자 수가 작다면 감독관 수를 카운트할 때 값이 int 범위(21억)을 넘을 수 있기 때문에 범위가 큰 타입으로 변수를 설정해야 하다.

 

 

 

LIST