본문 바로가기
Algorithm/스택&큐&덱&힙

[프로그래머스] PCCP 모의고사 2회 3번 카페 확장

by HANNI하니 2023. 12. 15.

사용 언어 - Python3

문제 - 카페 확장

https://school.programmers.co.kr/learn/courses/15009/lessons/121689

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

정답

한사람씩 주문받으면서 시간 업데이트! 몇명이 대기중인지 확인한다.

 

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

 

[프로그래머스] [PCCP 모의고사 #2] 카페 확장

문제 https://school.programmers.co.kr/learn/courses/15009/lessons/121689 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이

dingdingcrong.tistory.com

 

댓글