문제
풀이
#include <string>
#include <vector>
using namespace std;
struct T_truck_weights
{
T_truck_weights() {}
T_truck_weights(int truck)
{
truck_weights = truck;
this->count = 1;
}
int truck_weights;
int count;
};
int solution(int bridge_length, int weight, vector<int> truck_weights) {
int answer = 0;
int maxWeight = 0;
vector<T_truck_weights> t_truck_weights;
/*
1. 다리에 올라가있는놈들 진행시키기
2. 다리에 올라갈 트럭이있는지 검사
3. 다리에 트럭올리기
*/
for (;;)
{
for (int i = 0; i < t_truck_weights.size(); i++) // 다리에 올라간 트럭만큼 반복한다.
{
if (t_truck_weights[i].count == bridge_length) // 트럭이 다리에 갯수만큼 건너갔는지 체크한다.
{
maxWeight -= t_truck_weights[i].truck_weights; // 다리를 건넌 트럭의 무개를 제거한다.
t_truck_weights.erase(t_truck_weights.begin() + i); // 다리를 지나간 트럭을 제거한다.
i = -1;
}
else
t_truck_weights[i].count++; // 다리에 올라간 트럭들의 count를 증가시킨다.
}
if (truck_weights.empty() && t_truck_weights.empty()) // 올라갈 트럭이 존재하지 않고
{
answer++;
return answer;
}
if (!truck_weights.empty() && maxWeight + truck_weights[0] <= weight) // 현재 올라갈 트럭이 남아있고 다리에 내가 트럭을 한대더 올려도 무게가 남는다면 다리에 트럭을 추가한다.
{
t_truck_weights.emplace_back(T_truck_weights(truck_weights[0]));
maxWeight += truck_weights[0];
truck_weights.erase(truck_weights.begin() + 0);
}
answer++;
}
return answer;
}
'코딩테스트' 카테고리의 다른 글
[코딩테스트] 타겟 넘버 (0) | 2021.08.20 |
---|---|
[코딩테스트] 체육복 (0) | 2021.08.13 |
[코딩테스트] 두 정수의 합 (0) | 2021.08.12 |
[코딩테스트] 기능개발 (0) | 2021.08.08 |
[코딩테스트] 부족한 금액 계산하기 (0) | 2021.08.06 |