알고리즘 모음(C++)

백준 13458 - 시험 감독(C++) 본문

백준

백준 13458 - 시험 감독(C++)

공대생의 잡다한 사전 2021. 12. 28. 00:54

문제 링크입니다. 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

삼성 SW 기출문제 였습니다.

간단한 산수 문제였음으로 쉽게 풀 수 있었습니다.

문제 조건
출력 예시

먼저 한개의 강의실에는 한명의 감독관이 필요합니다.

따라서 B의 값보다 작은 강의실은 모두 1입니다.

 

B의 값보다 큰 값을 가진 강의실의 경우, 보조 감독관이 필요합니다.

이때, 보조 감독관이 몇명 필요한지를 구해야합니다.

 

예시를 들어보면, 4명이 남지만, 보조 감독관이 2인 경우 -> 4 % 2 == 0 임으로 2명만 필요합니다.

4명이 남지만, 보조 감독관이 3인 경우 -> 4 % 3 == 1 임으로 2명이 필요합니다.

따라서 나머지가 있으면 한명을 더해주고, 아니면 몫만 더해주면 됩니다.

 

이때 총 감독의 수는 int의 범위를 벗어날 수 있으므로 long long으로 선언해주셔야 합니다.

 

 

자세한 것은 코드를 참고해주세요.

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <vector>
#include <stack>
#include <cmath>
#include <cstring>


using namespace std;

int N;
vector<int> people;
int B, C;
long long int need;

void solve() {
	need += N;
	for (int i = 0; i < N; i++) {
		people[i] -= B;
		if (people[i] > 0) {
			if (people[i] % C == 0) {
				need += people[i] / C;
			}
			else {
				need += (people[i] / C + 1);
			}
		}
	}
	cout << need;
}

int main() {
	cin.tie(0);
	cout.tie(0);
	cin >> N;
	for (int i = 0; i < N; i++) {
		int x;
		cin >> x;
		people.push_back(x);
	}
	cin >> B >> C;
	solve();
	return 0;
}

 

질문 및 조언 댓글 남겨주세요.