𝒩ew𝓣𝓮ams 정모~
PS를 해보자
훠궈굿
🎶 𝓟s ♫
모여서 랜덤 디펜스를 하기로 정했었다.
<검색 쿼리>
*s2..g5 : 이런 식으로 난이도 조정
s#100.. : 100명 이상이 푼 문제
-@$me : 내가 안 푼 문제
유리는 골드로 범위 잡았지만 난 실버 끼워서 그냥 하여자 하기로 했다
ㅎㅎ 실1이 나와서 기뻤다
랜디를 제대로 해 본 적이 없어서
이럴게 하는 게 맞나? 태그랑 티어랑 다 가리고 시간 정해서 해야 하는 건가
# 23350
K 물류창고
🥈 Silver1
N 개의 컨테이너
1개의 로봇
컨테이너의 무게만큼 비용을 발생
컨테이너마다 우선순위는 1 이상(높) M 이하(낮)의 정수
우선순위가 낮은 컨테이너를 먼저 적재
=> 아닐 시 : 레일의 처음으로 보냄 / 컨테이너의 무게만큼 비용 발생
우선순위가 같을 땐, 무게가 무거운 컨테이너를 아래에 위치
=> 아닐 시 : 컨테이너를 빼내고 다시 적재(가벼운 컨테이너가 모두 빠질 때까지) / 컨테이너를 뺄 때와 적재될 때 컨테이너의 무게만큼 비용 발생
트럭은 스택이고
ㄹㅔ일은 큐다
으악! 무게 안 맞는 애들 다시 적재한다는 게 다시 레일에 올려놓는다는 건 줄 알았는데!!!
왜 이상하지 하고 보니까
아래 그림에 기타 공간에 수평으로 다 내려놓고 다시 쌓는 거였다
아아 위에 글로 자세히 말해주셨어여죠..
import sys
# 컨테이너의 개수 / 우선순위의 종류
N, M = map(int,sys.stdin.readline().split())
# 우선순위/무게 - 레일 위 컨테이너들
rail = []
# 각 우선순위별 컨테이너 개수
PriorityNumCount = [0 for _ in range(M+1)]
for _ in range(N):
Priority, weight = map(int,sys.stdin.readline().split())
rail.append((Priority,weight))
PriorityNumCount[Priority] += 1
# 트럭
truck = []
# 현재 우선순위
PriorityNum = M
recentPriorityNumCount = 0
# 결과값
robotCost = 0
while(rail) :
Priority, weight = rail.pop(0)
# 목표 우선순위 일치
if PriorityNum == Priority :
robotCost += weight
# 트럭에 선적재된 컨테이너보다 무거울 시
remainSpace = []
while(truck and Priority == truck[-1][0]):
if truck[-1][1] < weight :
truckPriority, truckWeight = truck.pop()
robotCost += truckWeight * 2
remainSpace.append((truckWeight, truckPriority))
else :
break
truck.append((Priority, weight))
remainSpace.sort(reverse=True)
for cha in remainSpace :
truck.append((cha[1],cha[0]))
recentPriorityNumCount += 1
# 해당 우선순위의 컨테이너가 다 해결됨
if PriorityNumCount[PriorityNum] == recentPriorityNumCount :
PriorityNum -= 1
recentPriorityNumCount = 0
# 목표 우선순위 불일치
else:
robotCost += weight
rail.append((Priority, weight))
print(robotCost)
왤케 긴 걸까
하여자로 살아야겟다
'Club|Project > 파이 \ 𝒩ew𝓣𝓮ams 알고리즘 스터디 | Algorithm' 카테고리의 다른 글
🎶 𝒩ew𝓣𝓮ams ♫ - UCPC 신청 (4) | 2024.06.13 |
---|---|
🎶 𝒩ew𝓣𝓮ams ♫ - 정모 (2) | 2024.05.28 |
🎶 𝒩ew𝓣𝓮ams ♫ - 새 PS팀 결성 (0) | 2024.05.14 |
🥧 파이를 다시 조 알고리즘 스터디 🥧 (3) | 2023.11.12 |
🥧파이 알고리즘 스터디🥧 3분기 계획! (0) | 2023.08.30 |