BOJ
[백준 13458] 시험감독
wo_ody
2020. 4. 20. 22:09
안녕하세요 !!! 우디🌝 입니당 ~
오늘은 시험감독 문제에 대해서 설명해드리겠습니다 !
문제
문제 설명
이 문제는 단순한 계산 문제이나 ,,, 함정이 숨어있습니다 ! 저도 낚였네용 ㅎㅎㅎ
< KEY POINT >
- 총감독관은 각각의 시험장에 오직 1명 (모든 시험장에 1명 투입)
- 시험장이 최대 안의 응시생들도 최대 but, 감독관이 감시할 수 있는 응시생들 최소일때
✔ 우선, 총감독 배치하고 각 시험장에 남은 응시생들을 배열에 담아줍니다.
xxxxxxxxxx
//b : 총감독이 감시할 수 있는 응시생
if(배열값 <= b) 배열값 =0;//총감독이 시험장 다 커버 가능
else
배열값 = 배열값 - b;//부감독이 필요해 ~
✔ 그 다음, 나머지 부감독관들을 배치해줍니다.
xxxxxxxxxx
//c : 부감들이 감시할 수 있는 응시생
if(배열값 != 0)//배열값이 0이면 총감독이 응시생 다 감시가능하다느 말이므로, pass ~
{
if(배열값 <= c) answer++;//부감독이 시험장 다 커버 가능 !
else
{
if(배열값 % c !=0) answer += (answer/c)+1;//넉넉히 1명더 드루와 !
else answer += answer/c;//맞아떨어지면 맞아떨어지는 만큼 드루와 !
}
}
✔ 마지막으로, 함정은 ❓
답을 담아줄 공간으로 int를 지정하시면 안됩니다 ㅜㅜㅜ
만약, 시험장 수가 1,000,000개 각 시험장 안의 응시생수가 1,000,000명 인데 총감독관과 부감독관들이 감시할 수 있는 응시생수가 1명이라면 ???
최종 답은 1,000,000 X 1,000,000
따라서, int 크기를 넘어가게 되어 무심코 습관적으로 (저 포함) int를 하시면 아니되옵니다 ,,,,,,,(알고보면 나만 ,,,?)
구현
x
using namespace std;
int n, b, c;
int arr[1000001];
int main()
{
cin >> n;
for (int i = 0; i < n; i++)
cin >> arr[i];
cin >> b >> c;
long long int answer = n;
for (int i = 0; i < n; i++)
{
if (arr[i] > b) arr[i] = arr[i] - b;
else
arr[i] = 0;
}
for (int i = 0; i < n; i++)
{
if (arr[i] != 0)
{
if (arr[i] <= c)
answer++;
else
{
if (arr[i] % c != 0) answer += (arr[i] / c) + 1;
else answer += arr[i] / c;
}
}
}
cout << answer;
}