[Boj] 백준 주차장 5464(python)
문제링크 : https://www.acmicpc.net/problem/5464
주차할 수 있는 공간 N개와 주차해야 하는 차 M이 주어지며
그 후 N줄은 주차장 가격이, M줄은 차의 무게가 입력되며, 2M줄만큼 일련의 과정이 입력된다.
양수는 주차를 의미하고, 음수는 출차를 의미한다.
고려해야 하는 상황은 주차장이 차로 가득 찬 경우
그 경우에서는 차가 대기하고 있고, 공간이 생기는 대로 먼저 온 순서대로 생긴 공간에 주차해야 함
이에 따라, 주차를 바로 못한 차를 큐로 처리함
import sys
from collections import deque
N, M = map(int, input().split())
stops = [False] * N
stops_expense = [] # 각각의 주차공간 가격
cars_expense = [] # 차의 무게
cars_dict = {} # 차가 몇 번째의 주차 공간을 썼는지 확인하는 딕셔너리
for _ in range(N):
stop = int(sys.stdin.readline().rstrip())
stops_expense.append(stop)
for _ in range(M):
car = int(sys.stdin.readline().rstrip())
cars_expense.append(car)
tmp_stops = deque() # 주차를 바로 못한 대기 중인 차들
for _ in range(2*M):
step = int(sys.stdin.readline().rstrip())
if step-1 >= 0:
for idx in range(N):
if stops[idx] is False:
stops[idx] = True
cars_dict[step-1] = idx # key를 차 번호로, value를 주차장 번호로
break
elif idx == N-1 and stops[idx] is True:
tmp_stops.append(step-1) # 만약 주차 공간이 없다면 대기 공간으로 이동
else:
if len(tmp_stops) == 0:
stops[cars_dict[-1 * step-1]] = False # 음수이므로 -1을 곱한 후 -1해줘야 함
else:
stops[cars_dict[-1 * step - 1]] = False
stops[cars_dict[-1 * step - 1]] = True
tmp_stop = tmp_stops.popleft() # 먼저 온 순서이므로 popleft
cars_dict[tmp_stop] = cars_dict[-step - 1]
answer = 0
for key, val in cars_dict.items():
answer += cars_expense[key] * stops_expense[val]
print(answer)
댓글남기기