굥뷰를 햡시댜

[BOJ-13458] 시험감독 본문

알고리즘 문제 풀이/BOJ 문제 풀이

[BOJ-13458] 시험감독

GodZ 2019. 8. 13. 10:36

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

 

삼성 기출문제이다.

 

상당히 쉬운 난이도의 시뮬레이션 문제였다.

 

주의할 점은 출력할 때의 값이 크기 때문에 long long으로 받아와서 출력해야한다.

 

- 풀이 방법

1. 입력을 받는다.

 

2. 총감독관은 1명이기 때문에 총감독관이 감시할 수 있는 인원수를 해당 시험장의 인원에서 빼준다.

 

3. 부감독관의 경우 여러명이 올 수 있다. 그래서 부감독관이 나머지 인원을 감시해야 하기 때문에 시험장의 나머지 인원을부감독관이 감시할 수 있는 인원만큼 나눠준다.

(나머지가 0일 경우(다 나눠질 경우)와 나머지가 0이 아닐 경우로 나눈다.)

 

4. 나머지가 0이 아닐 경우 감시할 수 있는 인원에 1명을 더 더한다.(나머지는 나눈 수보다 무조건 작기 때문에)

 

5. 나머지가 0일 경우 시험장의 인원이 부감독관이 감시할 수 있는 인원보다 크면 나눈 몫을 더해주고 작을 경우 1명을 더해준다.

 

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>

using namespace std;

int n;
long long res;
int map[1000001];
int b, c;

int main(void) {

	scanf("%d", &n);

	for (int i = 0; i < n; i++) {
		scanf("%d\n", &map[i]);
	}

	scanf("%d %d", &b, &c);

	for (int i = 0; i < n; i++) {
		if (map[i] - b >= 0) {
			map[i] -= b;
			res += 1;
		}	//총감독관

		else {
			map[i] = 0;
			res += 1;
			continue;
		}
		if (map[i] == 0) continue;

		if (map[i] % c != 0) res += (map[i] / c) + 1;
		else {
			if (map[i] > c) {
				res += map[i] / c;
			}
			else {
				res += 1;
			}
		}
	}

	printf("%lld\n", res);

	getchar();
	getchar();

	return 0;
}

'알고리즘 문제 풀이 > BOJ 문제 풀이' 카테고리의 다른 글

[BOJ - 17406] 배열 돌리기 4  (0) 2019.08.17
[BOJ-17281] 야구  (0) 2019.08.16
[BOJ-14891] 톱니바퀴  (0) 2019.07.31
[BOJ-15686] 치킨배달  (0) 2019.07.26
[BOJ-14503] 로봇청소기  (0) 2019.07.26
Comments