📌 LeetCode [1701]: Average Wating Time
🔗 문제링크
문제 설명 📄
문제 접근 방식 📋
도착 시간이 정렬되어 있다고 문제에서 설명되어 있으니 단순히 반복문을 돌며 각각 대기시간을 구하면 된다고 생각하고 접근했습니다.
아이디어 설명 💡
고객이 도착했을 때, 만약 이전 작업이 끝난 시간이 고객의 도착 시간보다 크면 추가 대기 시간이 발생합니다.
그렇기 때문에 만약 excuteTime(작업이 실제 끝난 시간)이 도착 시간보다 크다면 watingTime을 0에서 계산한 시간으로 변경한후
totalWaitTime에 합치고 excuteTime은 도착시간+작업시간+기다린 시간을 더해서 갱신해주고 마지막에 customers 의 수로 나누어
반환합니다.
Solution 💻
class Solution:
def averageWaitingTime(self, customers: List[List[int]]) -> float:
totalWaitTime = 0
excuteTime = 0
for arrivalTime, waitTime in customers:
waitingTime = 0
if excuteTime > arrivalTime:
waitingTime = excuteTime -arrivalTime
totalWaitTime += waitTime + waitingTime
excuteTime = arrivalTime+waitTime+waitingTime
return totalWaitTime/len(customers)
시간 복잡도 분석 ⏲️
- 시간 복잡도:
O(n)
- 고객 리스트를 한 번 순회하기 때문에 O(n)
공간 복잡도 분석 🗄️
- 공간 복잡도:
O(?)
- 추가적인 리스트나 배열을 생성하지 않기 때문에 상수 공간만 사용
리팩토링 🛠️
변수 이름 가독성 좋게 변경, max() 로 대기시간을 한번에 구함
class Solution:
def solutionFunction(self, customers: List[List[int]]) -> float:
totalWaitingTime = 0
currentTime = 0
for arrivalTime, cookTime in customers:
currentTime = max(currentTime, arrivalTime)
totalWaitingTime += currentTime + cookTime - arrivalTime
currentTime += cookTime
return totalWaitingTime / len(customers)
'알고리즘' 카테고리의 다른 글
LeetCode [1]: Two Sum (0) | 2024.11.19 |
---|---|
LeetCode [338]: Counting Bits (0) | 2024.11.18 |
LeetCode [242]: Valid Anagram (0) | 2024.11.18 |
LeetCode [347]: Top K Frequent Elements (0) | 2024.11.18 |
LeetCode [191]: Number of 1 Bits (0) | 2024.11.17 |