본문 바로가기
✨ Club/파이 \ 𝒩ew𝓣𝓮ams 알고리즘 스터디 | Algorithm

🎶 𝒩ew𝓣𝓮ams ♫ - 정모

by 정람지 2024. 5. 21.

𝒩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)

왤케 긴 걸까

하여자로 살아야겟다


투리본 컬렉션 완성