프로그래머스 다리를 지나는 트럭 C++ 풀이
https://programmers.co.kr/learn/courses/30/lessons/42583
// 너무 어렵다 연습이 필요할듯
// 일단 시간은 흐른다. 현재 시간에서 넣은 시간을 빼서 그게 맞으면 트럭을 넣는 큐에서 빼주고
// 아니면 들어갈 수 있나 확인하고 만약 마지막이면 다리 길이만큼 시간에 더한다. 트럭 큐와 넣은 시간을 시간큐에 넣어준다.
// 트럭넣는 큐 q와 시간넣는 큐 t를 두개 만든다.
// while문을 돌려서 시간 증가시키고 현재 시간에 큐 처음 들어갔을때 시간 큐를 빼서 그게 다리 길이와 같은지 확인
// 새로 넣을 것과 현재까지 들어간 무게가 weight 이하인지 확인한다. 이 조건문 안에서 만약 트럭이 하나 남았을 경우에는 바로 그냥 다리 길이 만큼 더해준다음 종료
// 하나 남지 않은 경우에는 q와 t에 각각 push하고 sum에 현재 들어간거 더해주고 idx++한다.
#include <string>
#include <vector>
#include <queue>
using namespace std;
int solution(int bridge_length, int weight, vector<int> truck_weights) {
queue <int> q;
queue <int> t;
int sum = 0;
int time = 0;
int truckIdx = 0;
while(1){
time++;
if (time - t.front() == bridge_length){
sum -= q.front();
q.pop();
t.pop();
}
if (sum + truck_weights[truckIdx] <= weight){
if (truckIdx == truck_weights.size() - 1){
time += bridge_length;
break;
}
q.push(truck_weights[truckIdx]);
t.push(time);
sum += truck_weights[truckIdx];
truckIdx++;
}
}
return time;
}
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 프린터 (0) | 2023.07.07 |
---|---|
[프로그래머스] 기능개발 (0) | 2023.07.07 |
[프로그래머스] 탑 (0) | 2023.07.07 |
[프로그래머스] 베스트앨범 (0) | 2023.07.07 |
[프로그래머스] 위장 (0) | 2023.07.06 |