티스토리 뷰

백준 13458번 시험감독

 

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

 

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	int room = 0;
	scanf("%d", &room);
	
	int *people = (int*) malloc(sizeof(int) * room);
	
	for(int i = 0; i<room; i++) {
		scanf("%d", &people[i]);
	}
	
	int head = 0;
	int sub = 0;
	long long int want = 0;
	
	scanf("%d %d", &head, &sub);
	
	for(int i = 0; i<room; i++) {
		if(head >= people[i]) continue;
		else {
			want += (people[i]-head) / sub;
			if((people[i]-head) % sub > 0) want++;
		}
	}
	
	printf("%lld", want+room);
	return 0;
}

 

풀이

  • 입력

방 개수를 입력 받음 (room)

방 개수만큼 크기의 배열을 동적 할당함 (people) 

그런 다음 수험생 수 들을 입력 받음

 

총 감독관, 부 감독관의 감독 가능한 사람 수를 입력받고,

 

각각의 방마다 부 감독관이 몇 명이나 필요 한 지를 구하고

이를 want에 누적시킴

 

  • 부 감독관 수 구하기

(특정한 방에 있는 사람 - 총감독관의 감독 가능한 사람 수) / 부 감독관의 감독 가능한 사람 수

>> 특정한 방에 필요한 부 감독관 (단 완전히 나눠 떨어질 경우)

위에 값이 나누어 떨어지지 않으면 사람이 1명 더 필요하므로, 

(특정한 방에 있는 사람 - 총 감독관의 감독 가능한 사람 수) % 부 감독관의 감독 가능한 사람 수 > 0

>> 특정한 방에 필요한 부 감독관 1명 추가

 

총 감독관 혼자서 다 감독할 수 있는 경우도 고려한다.

(특정한 방에 있는 사람 <= 총감독관의 감독 가능한 사람 수) 

>> 특정한 방에 필요한 부 감독관 0명 추가

 

  • 출력

방의 크기의 최댓값은 1000000, 방마다 수험생의 최댓값도 1000000이므로, 부 감독관의 수가 2^32를 초과할 수 있으므로, 부 감독관의 수를 담는 want의 자료형을 long long int (8byte)로 만들어 주었다.

 

부 감독관의 수를 구한 후, 여기에 총감독관의 수(= 방의 개수)를 더해준 값을 출력해주면 된다.

최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함