-
다리를 지나는 트럭알고리즘 풀이/Programmers 2021. 12. 19. 20:53728x90
https://programmers.co.kr/learn/courses/30/lessons/42583
#include <iostream> #include <string> #include <vector> #include <queue> using namespace std; struct truck { public : int position; int weight; void addPosition() { position = position + 1; } truck(int p, int w) { position = p; weight = w; } }; int solution(int bridge_length, int weight, vector<int> truck_weights) { std::deque<int> truckQueue; std::deque<truck*> brigeTruckQueue; for (auto t : truck_weights) { truckQueue.push_back(t); } int sec = 0; int truckWeightSum = 0; while (true) { if (!truckQueue.empty()) { const int truckWeight = truckQueue.front(); while ((truckWeightSum + truckWeight) <= weight && !truckQueue.empty()) { truckWeightSum += truckWeight; truckQueue.pop_front(); // 1차선 도로이므로 한대씩 들어간다. brigeTruckQueue.push_back(new truck(0, truckWeight)); break; } } // 현재 다리위에 있는 트럭을 이동시킨다. for (auto dq : brigeTruckQueue) { dq->addPosition(); if (dq->position >= bridge_length) { brigeTruckQueue.pop_front(); truckWeightSum -= dq->weight; } } // 다 이동했으면 1초가 지난것 ++sec; // 더이상 들어올 트럭도 없고, 다리위에도 트럭이 없는경우 끝 if (truckQueue.empty() && brigeTruckQueue.empty()) { ++sec; break; } } return sec; }
c++ 오랫만에 햇더니 문법이 기억이 안나서 힘들었음
며칠하면 괜찮아 지겠지
문제 관련해서는,
이 문제 전까지는 요구하는 자료구조를 신경안쓰고 하다가
그러면 안될것 같아서 deque이용해 문제 풀이 하였다.
문제를 이해하는데 좀 시간이 걸렸다.
이동량 등이 명기되어 있지 않아 별로 좋은 문제는 아닌것 같다..
728x90