코드
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을 넣어준다.
'Koala - 12기 > 코딩테스트 준비 스터디' 카테고리의 다른 글
[백준/C++] 5464번: 주차장 (0) | 2023.11.20 |
---|---|
[백준/C++] 5464번 주차장 (0) | 2023.11.18 |
[백준/Python] 1446번 : 지름길 (1) | 2023.11.13 |
[백준/C++] 3036번: 링 (1) | 2023.11.13 |
[백준/python] 5972번: 택배 배송 (1) | 2023.11.13 |