[백준] 17612번 쇼핑몰 파이썬

dongEon·2024년 5월 31일
0

문제링크: https://www.acmicpc.net/problem/17612

소스코드

import sys
input = sys.stdin.readline
import heapq

n,m = map(int, input().split())
# n명, 계산대 m개

cus = [] # 고객번호 배열
item = [] # 물건 갯수 배열

for _ in range(n):
    a, b = map(int,input().split())
    cus.append(a)
    item.append(b)

fin = [] # 계산마친 사람 배열
h = [] # 우선순위 큐
accumulate = [0] * m # 계산대 별 누적시간

for i in range(m):
    heapq.heappush(h, (0, i)) # 초기에는 세 계산대 다 사용해야하므로 (누적시간, 계산대 번호) 를 힙에 넣는다.

for i in range(n):
    ac, num = heapq.heappop(h)
    accumulate[num] += item[i] # 계산시간 만큼 계산대 별 누적시간에 더한다.
    heapq.heappush(h, (accumulate[num], num)) # 추가된 시간을 다시 힙에 넣는다.
    fin.append((accumulate[num], num, i)) # 누적시간, 계산대번호, 인덱스를 배열에 담는다.

fin.sort(key=lambda x: (x[0], -x[1])) # 배열을 내림차순의 누적시간과, 오름차순의 계산대 번호로 정렬 => 누적시간이 같은경우 높은계산대가 먼저 나감

ans = 0

for idx, info in enumerate(fin):
    ans += (idx+1) * cus[info[2]]

print(ans)
profile
개발 중에 마주한 문제와 해결 과정, 새롭게 배운 지식, 그리고 알고리즘 문제 해결에 대한 다양한 인사이트를 공유하는 기술 블로그입니다

0개의 댓글