스택 때 해보려다가 실패하고 큐 연습하고 돌아왔다.
반복의 조건을 다시 생각해보았다.
처음의 생각은, 다리/트럭 큐가 빌때까지.
그러나 2번의 경우로 인해 수정하였다.
곤란했던 부분
1. 다리를 지나는 중을 표현
다리 큐에 넣자마자 pop되는 문제 -> 0을 넣어 해결
2. 마지막 트럭
//다리 공간 여유 && 무게 여유 체크 시 트럭이 비어있는 경우를 고려하지 않음.
-> //마지막 트럭이 지나간 시간을 알 수 있으면 해결 가능한 문제이므로 트럭큐가 빌 때까지 진행한다.
#include <string>
#include <vector>
#include <deque>
using namespace std;
int solution(int bridge_length, int weight, vector<int> truck_weights) {
deque <int> trucQue(truck_weights.begin(), truck_weights.end());
deque <int> bridgeQue(bridge_length, 0); //0 0 7 4 5 6
int timer = 0;
int w = weight;
//1초 동안 발생하는 일
//다리를 건너는 중, 다리를 다 건넌다.
//마지막 트럭이 지나간 시간을 알 수 있으면 해결 가능한 문제이므로 트럭큐가 빌 때까지 진행한다.
while (!trucQue.empty())
{
//상시: 다리를 지나는 중
++timer;
w += bridgeQue.front();
bridgeQue.pop_front();
//다리 공간 여유 && 무게 여유
if (bridgeQue.size() < bridge_length && w - trucQue.front() >= 0)
{
w -= trucQue.front();
bridgeQue.push_back(trucQue.front());
trucQue.pop_front();
}
//다리 진입 불가할 경우 0으로 채운다.
else
{
bridgeQue.push_back(0);
}
}
int answer = timer + bridge_length;
return answer;
}
'학습(0) > C++ 문제풀이' 카테고리의 다른 글
영어 끝말잇기 (0) | 2025.03.07 |
---|---|
완주하지 못한 선수 (0) | 2025.03.07 |
컨트롤 Z/프로그래머스 no matching 에러. (0) | 2025.03.05 |
표 편집, 이어서 (0) | 2025.03.03 |
프로.1.크레인 (0) | 2025.03.02 |