https://www.acmicpc.net/problem/13458
[필자 사고]
삼성기출문제이다.
실수할 요소들이 2가지가 존재한다.
C의 값이 1일경우
N이 100만명
모든 반에 100만명이 있을경우 필요한 감독수는 Integer 범위를 넘어가게 된다.
즉 long 형태로 resultCount를 선언해야 된다.
두 번째는 B의 값이 1000000일경우 number - B 의 형태가 음수가 되는 상황이 존재한다.
이럴경우도 신경 써야 한다.
2가지 실수 포인트만 조심하면 쉽게 문제를 해결 할수 있따.
아래는 소스코드 해설이다.
주요 개념
- 입력 및 초기화
- N: 입력받을 정수의 개수.
- arr: N개의 정수를 저장하는 벡터. 각 정수는 시험을 치르는 사람의 수를 나타냅니다.
- B, C: 감독관의 감시 가능 인원 수. B는 총감독관이 감시할 수 있는 인원 수이고, C는 부감독관이 감시할 수 있는 인원 수입니다.
- resultCount: 감독관의 총 인원 수를 저장할 변수입니다.
함수 설명
- Input() 함수
- 입력을 받는 함수입니다.
- 첫 번째로 시험장의 개수 N을 입력받고, arr 벡터를 크기 N으로 설정한 뒤, N개의 정수를 입력받아 arr에 저장합니다.
- 다음으로 총감독관이 감시할 수 있는 인원 수 B와 부감독관이 감시할 수 있는 인원 수 C를 입력받습니다.
- countPeople(int number) 함수
- number: 해당 시험장의 총 인원 수를 나타냅니다.
- 이 함수는 한 시험장에 필요한 감독관의 수를 계산합니다.
- 먼저, 총감독관 한 명으로 B명까지 감시할 수 있으므로, number에서 B를 뺀 나머지 인원을 계산하여 remainNum에 저장하고, 감독관의 수를 1 증가시킵니다 (resultCount++).
- remainNum이 0 이하이면 모든 인원을 총감독관 한 명으로 감시할 수 있기 때문에 함수는 바로 종료됩니다.
- 그렇지 않으면 남은 인원을 C로 나누어 추가로 필요한 부감독관의 수를 계산하여 plusPeople에 저장합니다.
- 만약 remainNum을 C로 나눈 나머지가 0이면, plusPeople만큼 부감독관을 더해 resultCount를 갱신합니다.
- 나머지가 0이 아니면, 부감독관이 한 명 더 필요하므로 resultCount에 plusPeople + 1을 더합니다.
- 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;
}
'백준 > 삼성기출문제' 카테고리의 다른 글
백준 3190 c++ "뱀" -PlusUltraCode- (2) | 2024.10.12 |
---|---|
백준 14889 c++ "스타트와 링크" -PlusUltraCode- (1) | 2024.10.11 |
백준 15686 c++ "치킨 배달" -PlusUltraCode- (0) | 2024.10.08 |
백준 14500 c++ "테트로미노" -PlusUltraCode- (1) | 2024.10.05 |
백준 c++ 14499 "주사위 굴리기" -PlusUltraCode- (1) | 2024.07.05 |