사용 언어 - Python3
문제 - 카페 확장
https://school.programmers.co.kr/learn/courses/15009/lessons/121689
정답
큐
한사람씩 주문받으면서 시간 업데이트! 몇명이 대기중인지 확인한다.
1. 첫번째 시도 (오답)
import heapq
def solution(menu, order, k):
heap = [] # 우선순위 큐
time = 0
total_time = 0
result = []
n = len(order)
while order:
answer = 1
cnt = 1
heapq.heappush(heap,order.pop(0))
time = menu[heapq.heappop(heap)] # menu[주문번호] 만큼의 시간 걸림
total_time += time
# 각 손님의 도착시간 k*cnt
# 각 손님의 주문 대기시간 time
for i in range(cnt,n+1): # 다음 손님도 이미 왔다면? 몇번째 다음 손님까지 와있는지 확인
print(i)
if k*i < total_time:
answer = i
print(total_time)
result.append(answer)
cnt += 1
print("_____")
return max(result)
2. 큐를 이용하는 방법
queue = deque()
i <= ((time-1)//k)인 경우 queue에 하나씩 대기인원을 저장한다
현재시간을 k(다음사람이 들어오는 시간)로 나눴을 때 몫이 1이면 1명, 2이면 2명, 3이면 3명 대기한다는 의미
queue에 아무도 없다면, time을 도착시간+주문시간으로 update
queue에 대기자가 들어있다면, time을 time+주문시간으로 update
answer = max(answer,len(queue)) 큐에 들어있는 최대 사람수
from collections import deque
def solution(menu,order,k):
answer = 0
n = len(order)
queue = deque() # 하나씩 주문받음
i = 0 # 사람수
time = 0
while queue or i<n:
if not queue:
time = (i*k) + menu[order[i]] # 시간 update = 도착시간 + 주문시간
i += 1 # 사람수
else:
x = queue.popleft()
time += menu[x] # 현재시간에 주문시간더하기
while i < n and i <= ((time-1)//k):
queue.append(order[i]) # 대기인원을 큐에 저장
i += 1
answer = max(answer,len(queue))
return answer + 1
레퍼런스
https://dingdingcrong.tistory.com/187
'Algorithm > 스택&큐&덱&힙' 카테고리의 다른 글
[프로그래머스 lv 2] 큰 수 만들기 (0) | 2023.12.19 |
---|---|
[프로그래머스] PCCP 모의고사 2회 2번 신입사원 교육 (0) | 2023.12.15 |
[프로그래머스] PCCP 모의고사 1회 4번 운영체제 (0) | 2023.12.14 |
[프로그래머스] PCCP 모의고사 1회 3번 유전법칙 (0) | 2023.12.14 |
[프로그래머스 lv 3] 이중우선순위큐 (0) | 2023.06.19 |
댓글