본문 바로가기
백준/삼성기출문제

백준 13458 c++ "시험 감독" -PlusUltraCode-

by PlusUltraCode 2024. 10. 9.

https://www.acmicpc.net/problem/13458

 

[필자 사고]

삼성기출문제이다.

실수할 요소들이 2가지가 존재한다.

C의 값이 1일경우 
N이 100만명 

모든 반에 100만명이 있을경우 필요한 감독수는 Integer 범위를 넘어가게 된다.

즉 long 형태로 resultCount를 선언해야 된다.

 

두 번째는 B의 값이 1000000일경우 number - B 의 형태가 음수가 되는 상황이 존재한다.

이럴경우도 신경 써야 한다.

 

2가지 실수 포인트만 조심하면 쉽게 문제를 해결 할수 있따.

 

아래는 소스코드 해설이다.

 

주요 개념

  1. 입력 및 초기화
    • N: 입력받을 정수의 개수.
    • arr: N개의 정수를 저장하는 벡터. 각 정수는 시험을 치르는 사람의 수를 나타냅니다.
    • B, C: 감독관의 감시 가능 인원 수. B는 총감독관이 감시할 수 있는 인원 수이고, C는 부감독관이 감시할 수 있는 인원 수입니다.
    • resultCount: 감독관의 총 인원 수를 저장할 변수입니다.

함수 설명

  1. Input() 함수
    • 입력을 받는 함수입니다.
    • 첫 번째로 시험장의 개수 N을 입력받고, arr 벡터를 크기 N으로 설정한 뒤, N개의 정수를 입력받아 arr에 저장합니다.
    • 다음으로 총감독관이 감시할 수 있는 인원 수 B와 부감독관이 감시할 수 있는 인원 수 C를 입력받습니다.
  2. countPeople(int number) 함수
    • number: 해당 시험장의 총 인원 수를 나타냅니다.
    • 이 함수는 한 시험장에 필요한 감독관의 수를 계산합니다.
    • 먼저, 총감독관 한 명으로 B명까지 감시할 수 있으므로, number에서 B를 뺀 나머지 인원을 계산하여 remainNum에 저장하고, 감독관의 수를 1 증가시킵니다 (resultCount++).
    • remainNum이 0 이하이면 모든 인원을 총감독관 한 명으로 감시할 수 있기 때문에 함수는 바로 종료됩니다.
    • 그렇지 않으면 남은 인원을 C로 나누어 추가로 필요한 부감독관의 수를 계산하여 plusPeople에 저장합니다.
    • 만약 remainNum을 C로 나눈 나머지가 0이면, plusPeople만큼 부감독관을 더해 resultCount를 갱신합니다.
    • 나머지가 0이 아니면, 부감독관이 한 명 더 필요하므로 resultCount에 plusPeople + 1을 더합니다.
  3. GameStart() 함수
    • 각 시험장마다 countPeople 함수를 호출하여 필요한 감독관의 수를 누적 계산합니다.

 

 

[소스 코드]

#include <iostream>
#include <vector>

using namespace std;

int N;
vector<int> arr;
int B, C;
long resultCount = 0;

void Input() {
	cin >> N;
	arr.resize(N);
	for (int i = 0; i < N; i++) {
		cin >> arr[i];
	}
	cin >> B >> C;
}

void countPeople(int number) {
	
	int remainNum = number - B;
	resultCount++;
	if (remainNum <= 0)return;


	int plusPeople = remainNum / C;
	int remain2 = remainNum % C;
	if (remain2 == 0) {
		resultCount += plusPeople;
		return;
	}
	else {
		resultCount = resultCount + plusPeople + 1;
	}
}

void GameStart() {
	for (int i = 0; i < N; i++) {
		int nowNum = arr[i];
		countPeople(nowNum);
	}
}

int main(void) {
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	Input();
	GameStart();

	cout << resultCount;
}