반응형
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
좋은 문제인 것 같다. 대기중인 차량을 잘 넣어주는 게 핵심이었던 듯.
문제풀이 과정은 주석.
내 코드
메모리 : 28164 KB
시간 : 132 ms
코드길이 : 1854 B
[내 코드]
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Solution {
static int n, m, result;
static int[] R, W, space;
static Queue<Integer> waiting;
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
int T = Integer.parseInt(br.readLine());
for(int t = 1; t <= T; t++) {
sb.append('#').append(t).append(' ');
st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken()); //주차공간
m = Integer.parseInt(st.nextToken()); //차량개수
result = 0; //벌어들인 주차요금
R = new int[n + 1]; //i번째 주차공간의 단위 무게 당 요금
space = new int[n + 1]; //i번째 주차공간에 들어가있는 차량의 번호
waiting = new LinkedList<>(); //대기하는 차량 넣어주기.
W = new int [m + 1];//차량 i의 무게
for(int i = 1; i <= n; i++) {
R[i] = Integer.parseInt(br.readLine());
}
for(int i = 1; i <= m; i++) {
W[i] = Integer.parseInt(br.readLine());
}
for(int i = 0; i < 2*m; i++) {
getMoney(Integer.parseInt(br.readLine()));
}
sb.append(result).append('\n');
}
System.out.print(sb);
}
//차량의 번호
static void getMoney(int number) {
//양수이면 입차
if(number > 0) {
//주차공간 중 맨 앞부터 채우기
for(int i = 1; i <= n; i++) {
//빈공간 찾으면
if(space[i] == 0) {
//해당 공간에 차량의 번호를 저장.
space[i] = number;
//주차요금 계산 후 리턴
result += R[i] * W[number];
return;
}
}
//여기까지 왔단 건 빈공간이 없단 뜻 >> 대기리스트에 넣기.
waiting.offer(number);
}
//음수이면 출차
else {
number *= -1;
for(int i = 1; i <= n; i++) {
//해당 번호의 차량이 있는 공간 찾았으면
if(space[i] == number) {
//대기리스트가 있을 때
if(!waiting.isEmpty()) {
//1순위 순서의 차량 번호를 넣어줌
space[i] = waiting.poll();
//주차요금 계산 후 리턴
result += R[i] * W[space[i]];
return;
}
else {
//대기리스트가 없으면
//출차한 차가 있는 자리 0으로 만들어준 후 리턴
space[i] = 0;
return;
}
}
}
}
return;
}
}
반응형
'SSAFY > SWEA' 카테고리의 다른 글
[SWEA] 13038 : 교환학생 (1) | 2023.05.13 |
---|---|
[SWEA] 14178 : 1차원 정원 (0) | 2023.05.13 |
[SWEA] 7193 : 승현이의 수학공부 (1) | 2023.05.13 |
[SWEA] 5431 : 민석이의 과제 체크하기 (0) | 2023.05.12 |
[SWEA] 11285 : 다트게임 (0) | 2023.05.12 |