SSAFY/SWEA

[SWEA] 9280 : 진용이네 주차타워

믕비 2023. 5. 13. 13:06
반응형

 

https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=3&contestProbId=AW9j74FacD0DFAUY&categoryId=AW9j74FacD0DFAUY&categoryType=CODE&problemTitle=&orderBy=RECOMMEND_COUNT&selectCodeLang=JAVA&select-1=3&pageSize=10&pageIndex=4 

 

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