문제 링크
https://programmers.co.kr/learn/courses/30/lessons/42583
코딩테스트 연습 - 다리를 지나는 트럭 | 프로그래머스
트럭 여러 대가 강을 가로지르는 일 차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 트럭은 1초에 1만큼 움직이며, 다리 길이는 bridge_length이고 다리는 무게 weight까지 견딥니다. ※ 트럭이 다리에 완전히 오르지 않은 경우, 이 트럭의 무게는 고려하지 않습니다. 예를 들어, 길이가 2이고 10kg 무게를 견디는 다리가 있습니다. 무게가 [7, 4, 5, 6]kg인 트럭이 순서
programmers.co.kr
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 |