반응형
포인트
- 다리를 지나는 트럭 구조체를 만들어서 다리라는 큐를 만들고 큐를 돌면서 진행을 하면 된다.
- 구조체를 잘 만들면 의미 분석하기 편하다.
🧶문서는 항상 수정 될 수 있습니다. 비판은 환영합니다.
c++/cpp
#include <vector>
#include <queue>
using namespace std;
struct Car { //차로 구조체를 만들기
int weight, length;
};
int solution (int bridge_length, int weight, vector<int> truck_weights) {
int answer=0;
queue<Car> bridge; //weight , length
int currentWeight=0;
while(1) {
int size=bridge.size ();
for(int i=0;i<size; i++) {
auto first_car=bridge.front ();
bridge.pop ();
if(first_car.length<=1) {
currentWeight-=first_car.weight;
continue;
}
bridge.push ({ first_car.weight, first_car.length - 1 });
}
if(!truck_weights.empty()&¤tWeight+truck_weights[0]<=weight) {
bridge.push ({ truck_weights[0], bridge_length });
currentWeight+=truck_weights[0];
truck_weights.erase (truck_weights.begin ());
}
answer+=1; //답을 1개 늘려준다.
if (truck_weights.empty()&&bridge.empty()) break; // 종료조건
}
return answer;
}
python
def solution(bridge_length: int, weight: int, truck_weights: list) -> int:
time = 0 # 시간 검사
bridge = [] #브릿지 함수
weight_monitoring = 0 # weight 모니터링
while True:
time += 1 # 시간을 얻자
size = len(bridge)
for _ in range(size):
temp_weight, length = bridge.pop(0)
if length <= 1:
weight_monitoring -= temp_weight
continue
bridge.append([temp_weight, length-1])
if truck_weights and weight_monitoring+truck_weights[0] <= weight:
weight_monitoring += truck_weights[0]
bridge.append([truck_weights[0], bridge_length])
truck_weights.pop(0)
if not truck_weights and not bridge:
# 기다리는 사람이 없고 카운트가 되지 않으면
break
return time
반응형
'알고리즘' 카테고리의 다른 글
[알고리즘] c++ cpp 단속카메라 (0) | 2020.11.04 |
---|---|
[알고리즘] c++ cpp 회의실 배정 (0) | 2020.11.04 |
[알고리즘] c++ cpp 바이러스 (0) | 2020.10.29 |
[알고리즘] c++ cpp 가장 긴 증가하는 부분 수열 3 (0) | 2020.10.28 |
[알고리즘] c++ cpp 가장 긴 증가하는 부분 수열 2 (0) | 2020.10.28 |
댓글