본문 바로가기

알고리즘 · 코딩

[프로그래머스] 다리를 지나는 트럭

문제 링크

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;
}

 

 

 

반응형