문제 링크
https://programmers.co.kr/learn/courses/30/lessons/42583
C++ 풀이
#include <string>
#include <vector>
using namespace std;
int solution(int bridge_length, int weight, vector<int> truck_weights) {
vector <pair<int, int>> TrucksOnTheBridge; // <트럭 무게, 남은 길이>
int weightSum = 0;
int time = 0;
while ((truck_weights.size() > 0) || (TrucksOnTheBridge.size() > 0)) {
time++;
weightSum = 0;
//다리 위 트럭들의 무게 계산
for (int i = 0; i < TrucksOnTheBridge.size(); i++) {
weightSum += TrucksOnTheBridge[i].first;
}
//다리가 무게를 견딜 수 있을 경우 트럭 출발
if ((truck_weights.size() > 0) && (weightSum + truck_weights.front() <= weight)) {
TrucksOnTheBridge.push_back(make_pair(truck_weights.front(), bridge_length));
truck_weights.erase(truck_weights.begin());
}
//다리 위 트럭들의 남은 거리 감소
for (int i = 0; i < TrucksOnTheBridge.size(); i++) {
TrucksOnTheBridge[i].second--;
}
//도착한 트럭 제외
while ((TrucksOnTheBridge.size() > 0) && (TrucksOnTheBridge.front().second <= 0))
TrucksOnTheBridge.erase(TrucksOnTheBridge.begin());
}
return time + 1;
}
반응형
'알고리즘 · 코딩' 카테고리의 다른 글
[프로그래머스] JadenCase 문자열 만들기 (0) | 2020.02.16 |
---|---|
[프로그래머스] 가장 큰 수 (0) | 2020.02.13 |
[프로그래머스] 최솟값 만들기 (0) | 2020.01.18 |
[프로그래머스] 프린터 (0) | 2020.01.04 |
[프로그래머스] 완주하지 못한 선수 (0) | 2019.12.27 |