본문 바로가기
Problem Solving/SWEA

[SWEA|파이썬] 9280. 진용이네 주차타워 (D3)

by 청량리 물냉면 2023. 5. 21.
반응형
문제

https://tinyurl.com/2makj3nh

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

 

🐍파이썬
from collections import deque
T = int(input())
for test_case in range(1, T + 1):
    n, m = map(int, input().split())
    charge = []
    car_w = []
    for _ in range(n):
        charge.append(int(input()))
    for _ in range(m):
        car_w.append(int(input()))

    parking = [0 for _ in range(n)]
    parking_car = 0 #현재 주차된 차의 수
    queue = deque() #대기장소
    total = 0
    dic = {i:-1 for i in range(m+1)}    #차량별 현재 주차된 위치
    arr = []
    for _ in range(2*m):
        arr.append(int(input()))

    for i in arr:
    	#주차공간이 있다면 먼저 queue에 대기중인 차들을 주차장에 다 넣어준다.
        while parking_car < n and queue:  # 주차공간 여유있고 queue가 비어있지 않으면
            a = queue.popleft()
            for j in range(n):
                if parking[j] == 0:	#빈자리 찾음
                    parking[j] = 1	#주차되어 있음을 표시
                    dic[a] = j	#{현재 주차된 차:주차장 자리}
                    total += car_w[a - 1] * charge[j]	#total += 차량별요금*주차장자리별요금
                    parking_car += 1	#주차된 차+1
                    break	#다른 빈자리를 찾지 못하게 break
        if i >= 0:   #입차
            queue.append(i)  #우선 queue에 대기 시키기
        else:
            parking[dic[abs(i)]] = 0  # 주차공간 비워주기
            dic[abs(i)] = -1	#주차장자리에 -1표시
            parking_car -= 1	#주차된 차-1
    print("#{} {}".format(test_case, total))

차량의 입차, 출차를 분류하기 전에 queue에 든 대기 중인 차량부터 비워주어야 한다.

주차장의 남는 자리에 queue의 차량을 가능한 만큼 주차시켰다면 i가 양수인지 음수인지 판단해 양수라면 주차시키고 음수라면 출차시킨다. 이때 dic을 사용해 i가 주차장의 어떤 위치에 주차되어 있는지 체크했고 출차 시 i가 주차되어 있던 주차장을 비워줌으로써 비워진 자리에 새로운 차량의 주차가 가능하게 하였다.

주차할 위치는 주차장의 처음부터 확인하여 가장 처음으로 발견한 비어있는 자리에 주차하도록 했다. total에 차량별 요금과 주차장자리별 요금을 곱한 값을 더해 값을 구했다. 

 

더보기

시간이 정말 오래 걸렸다. 논리의 흐름을 생각하는 게 중요했던 문제. 순서가 하나라도 틀리면 정답이 출력되지 않는다. 비슷한 구현 문제를 많이 풀어보자.

반응형