https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=3&contestProbId=AW9j74FacD0DFAUY&categoryId=AW9j74FacD0DFAUY&categoryType=CODE&problemTitle=&orderBy=FIRST_REG_DATETIME&selectCodeLang=JAVA&select-1=3&pageSize=10&pageIndex=5
조건
- 주차장 출입을 입력받을때 양수인지 음수인지
- 양수라면 주차공간이 비었는지 확인하고, 가능한 작은번호의 주차공간부터 채우고, 꽉 찼다면 대기큐에 넣기
- 음수라면 나가는 차를 주차공간에서 빼주고 주차요금을 받고, 나간 다음 대기큐를 확인해 대기차량이 있다면 가장 먼저 대기하던 차부터 가장 작은 번호의 주차공간부터 채워준다. 여기서 차량 무게는 i+1의 인덱스를 가지므로 주차요금계산시엔 -1의 계산이 필요하다
public class Pro9280 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int TC = Integer.parseInt(br.readLine());
for(int T=1;T<=TC;T++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int[] arr_n = new int[n];
int[] check = new int[n];
int[] arr_m = new int[m];
for(int i=0;i<n;i++) {
arr_n[i]=Integer.parseInt(br.readLine());
}
for(int i=0;i<m;i++) {
arr_m[i]=Integer.parseInt(br.readLine());
}
Queue<Integer> readyQ = new LinkedList<>();
int sum = 0;
for(int i=0;i<2*m;i++) {
int tmp = Integer.parseInt(br.readLine());
if(tmp>0) {
int count = 0;
for(int j=0;j<n;j++) {
if(check[j]==0) {
check[j]=tmp;
break;
}else count++;
}
if(count==n)readyQ.offer(tmp);
}else {
for(int j=0;j<n;j++) {
if(check[j]==-tmp) {
check[j]=0;
sum+=arr_n[j]*arr_m[-tmp-1];
break;
}
}
if(!readyQ.isEmpty()) {
int readyCar = readyQ.poll();
for(int j=0;j<n;j++) {
if(check[j]==0) {
check[j]=readyCar;
break;
}
}
}
}
}
bw.write("#"+T+" "+sum+"\n");
}
bw.flush();
bw.close();
}
}