1701. Average Waiting Time / c++ / Medium / 30분
문제 및 코드
class Solution {
public:
double averageWaitingTime(vector<vector<int>>& customers) {
long long currentTime = 0;
long long waitTimeSum = 0;
for (const auto& iter : customers)
{
if (currentTime < iter[0])
{
currentTime = iter[0];
}
currentTime += iter[1];
waitTimeSum += currentTime - iter[0];
}
return waitTimeSum / (double)customers.size();
}
};
접근 방식
자료 구조 / 배열
- 모든 손님에게 차례대로 음식을 준비한다 했을 때, 손님들의 대기 시간의 평균값을 구하는 문제
- customers 벡터를 순회면서
- 만약 현재 시간이 손님의 도착 시간보다 작다면 갱신
- 현재 시간에 해당 손님의 음식 준비 시간을 더한다
- waitTimeSum에 손님의 대기 시간 (현재 시간 - 손님의 도착 시간)을 더한다
- waitTimeSum을 손님의 수로 나눠 준다. 이 때 double로 반환해야 하므로 손님의 수에 double을 취해준다.
- 해결
생각해 볼 점
- 차례대로라는 문제의 설명을 제대로 못읽고, 당연하게 대기 시간의 최소 값 인줄 알고, 그리디 알고리즘을 써서 항상 처리할 수 있는 손님 중 가장 준비 시간이 작은 손님을 처리했더니 틀렸었다..
- 손님의 수는 100’000, 손님 당 준비 시간은 10’000 이므로, 이를 곱하면 10’000’000’000 (백억) 이 나오는데, 이걸 십억으로 착각하고, currentTime과 waitTimeSum의 자료 형을 int로 선언했더니, overflow가 났었다.. 값의 최대 범위 체크에 좀 더 신경써야겠다.