-
[SWEA][9280번] 진용이네 주차타워Algorithm/SWExpertAcademy 2020. 3. 29. 21:40
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AW9j74FacD0DFAUY
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
LEVEL D3
사용언어 C++
풀이과정
복잡한 알고리즘은 없으며, 들어오는 순서대로 상황에 맞게 처리해주면 되는 시뮬레이션 문제로 판단되었다.
주차장이 꽉차있으면, wait하도록 했으며, 주차장에서 차가 나갈경우 wait 차량이 있으면 바로 주차하도록 구현했다.
소스코드
더보기#include <stdio.h> #include <vector> #include <queue> using namespace std; int N, M; int R[101] = { 0, }; //주차장 무게 당 요금 int W[10001] = { 0, }; // 차량의 무게 vector<int> park; queue<int> wait; queue<int> line; int findNumberPark(int n) { for (int i = 0; i < park.size(); i++) { if (n == park[i]) { park[i] = 0; return i; } } } int findEmptyPark() { for (int i = 0; i < park.size(); i++) { if (park[i] == 0) { return i; } } return -1; } int solution() { int answer = 0; while (!line.empty() || !wait.empty()) { int n; if (!line.empty()) { n = line.front(); line.pop(); } else { n = wait.front(); wait.pop(); } if (n > 0) { //주차 int idx = findEmptyPark(); if (idx == -1) { wait.push(n); } else { park[idx] = n; answer += R[idx] * W[n - 1]; } } else { // 나감 n = n * -1; int idx = findNumberPark(n); if (wait.size() > 0) { int n2 = wait.front(); wait.pop(); park[idx] = n2; answer += R[idx] * W[n2 - 1]; } } } return answer; } int main() { int tc; scanf("%d", &tc); for (int t = 1; t <= tc; t++) { scanf("%d %d", &N, &M); for (int i = 0; i < N; i++) { scanf("%d", &R[i]); } for (int i = 0; i < M; i++) { scanf("%d", &W[i]); } for (int i = 0; i < 2 * M; i++) { int n; scanf("%d", &n); line.push(n); } park.resize(N); printf("#%d %d\n", t, solution()); } }
'Algorithm > SWExpertAcademy' 카테고리의 다른 글
[SWEA][8424번] 유일한 사이클 (0) 2020.04.01 [SWEA][9092번] 마라톤 (0) 2020.03.30 [SWEA]5653. [모의 SW 역량테스트] 줄기세포배양 (1) 2020.03.16 [SWEA]5658. [모의 SW 역량테스트] 보물상자 비밀번호 (0) 2020.03.15 [SWEA] 2112. [모의 SW 역량테스트] 보호 필름 (0) 2020.03.12