1 분 소요

문제링크 : 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)

카테고리:

업데이트:

댓글남기기