Koala - 12기/코딩테스트 준비 스터디

[백준python] 5464번: 주차장

ㄱㅈㅅㅇ 2023. 11. 15. 16:29

5464번: 주차장 (acmicpc.net)

 

5464번: 주차장

시내 주차장은 1부터 N까지 번호가 매겨진 N개의 주차 공간을 가지고 있다. 이 주차장은 매일 아침 모든 주차 공간이 비어 있는 상태에서 영업을 시작하며, 하룻동안 다음과 같은 방식으로 운영

www.acmicpc.net

코드

n,m=map(int,input().split()) #주차공간n 차량m
Rs=[0] #단위무게당요금 i 번쨰
Wk=[0] #차량의 무게 i 번째
for _ in range(n):
    Rs.append(int(input()))
for _ in range(m):
    Wk.append(int(input()))
I=[] #차 오고가는거 큐
for _ in range(2*m):
    I.append(int(input()))
money=0 #주차료 = 차량의 무게 X 그 자리 값
visit=[0]*(n+1)
while I:
    for i in range(n):
        if visit[i+1]==0:
            Y=i+1
            break
        else: Y=-1
    #빈자리 Y번째칸 근데? 없으면 -1
    if Y==-1: #빈자리없으면 나가는차바로찾기
        for i in range(len(I)):
            if I[i]<0:
                break
        X=I.pop(i)
    else:
        X=I.pop(0)
    #X에 i차가 들어왓는지나갔는지저장
    if X>0:
        money += Rs[Y] * Wk[X]
        visit[Y]=X
    else:
        for i in range(1,n+1):
            if visit[i]== -X:
                visit[i]=0
                break

print(money)

설명

단순히 문제의 요구를 따라가는 문제라고 생각해서 특별히 알고리즘을 고민하지 않고 풀었다.

필요한입력을 받아준 후, 차량이 들어오고 나감을 받은 큐가 다 비워질 때 까지 반복한다. 

주차장에 빈 곳이 있는지를 visit=[]을 만들어 확인한 후 결과를 Y에 저장하고 만약 빈 곳이 없다면 입력받은 I에서 차가 나가는 부분을 X에 pop해준다.  그게 아니라면 pop(0)을 해서 X에 저장한다.

만약 X가 들어오는 차량이라면 visit에 가장 앞부터 채워주고 돈계산을 해준다. 나가는 차량이라면 visit에 0을 넣어준다.